书中如是说:接口方法定义时不得直接实现,必须在类使用时重载来具体实现
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对象的结构啊??如果自己要做类似的功能如何写?
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对象的结构啊??如果自己要做类似的功能如何写?
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();
}
}
}
打个比方,我定义一个接口,这时候没有过程{}
interface ITest{
public void say();
}
我在实现时必须重载它,他才有用
class CApp implements ITest{
public void say(){
System.out.println("hello");
}
}但是如果继承Serializable,我无须写任何实现代码,该类就自动可以序列化,为什么呢?如果这是一个编译指令我可以理解,但是作为一个接口我很糊涂换句话说,是不是可以给接口创建默认实现方法呢?
Serializable 只是一个接口而已 你觉得他哪里不对了?
。因为Serializable接口源码是这样的
public interface Serializable {
}
里面什么也没有
看了api有查了一些反射的内容,大致弄懂了