书中如是说:接口方法定义时不得直接实现,必须在类使用时重载来具体实现
interface ITest{
  public void F1();
  public void F2();
}
如果public void F1()改成public void F1(){}就编译报错
但是序列化Serializable,为什么只要继承,而什么也无需做也能起作用呢?class CTest implements Serializable{
 public int intA;
 public String strB;
}class Application{
  public static void main(String astrArg[]){
     ObjectInputStream ois=.....;
     CTest objTest=ois.readObject();
  }
}此外还有个问题,为什么ObjectInputStream .readObject()无须传入参数就能读出对象?????
在readObject()时,并没有操作告知ObjectInputStream对象的结构啊??如果自己要做类似的功能如何写?

解决方案 »

  1.   

    readObject();本来就是不要参数传入的
     public final Object readObject() 
    throws IOException, ClassNotFoundException
        {
    if (enableOverride) {
        return readObjectOverride();
    } // if nested read, passHandle contains handle of enclosing object
    int outerHandle = passHandle;
    try {
        Object obj = readObject0(false);
        handles.Dependency(outerHandle, passHandle);
        ClassNotFoundException ex = handles.lookupException(passHandle);
        if (ex != null) {
    throw ex;
        }
        if (depth == 0) {
    vlist.doCallbacks();
        }
        return obj;
    } finally {
        passHandle = outerHandle;
        if (closed && depth == 0) {
    clear();
        }
    }
        }
      

  2.   


    打个比方,我定义一个接口,这时候没有过程{}
    interface ITest{
      public void say();
    }
    我在实现时必须重载它,他才有用
    class CApp implements ITest{
      public void say(){
        System.out.println("hello");
      }
    }但是如果继承Serializable,我无须写任何实现代码,该类就自动可以序列化,为什么呢?如果这是一个编译指令我可以理解,但是作为一个接口我很糊涂换句话说,是不是可以给接口创建默认实现方法呢?
      

  3.   

    你第一个是什么问题啊?
    Serializable 只是一个接口而已 你觉得他哪里不对了?
      

  4.   


    。因为Serializable接口源码是这样的
    public interface Serializable {
    }
    里面什么也没有
      

  5.   

    感谢回复
    看了api有查了一些反射的内容,大致弄懂了