关于Java序列化的澄清
我正在学习序列化,在外部化中遇到了这个函数关于Java序列化的澄清,java,Java,我正在学习序列化,在外部化中遇到了这个函数 我知道该方法创建了一个名为oi的ObjectOutput类型的对象,用于将实例变量写入该对象。当我想进一步了解ObjectOutput类时,我很惊讶ObjectOutput是一个接口!我认为Java不允许创建接口类型的对象。请让我知道为什么会这样,或者如果我理解错了,请纠正我。首先,正如trappski在评论中指出的那样,writeExternal没有创造任何东西ObjectOutput是由调用的任何代码传递给它的参数writeExternal 接口的
我知道该方法创建了一个名为oi的ObjectOutput类型的对象,用于将实例变量写入该对象。当我想进一步了解ObjectOutput类时,我很惊讶ObjectOutput是一个接口!我认为Java不允许创建接口类型的对象。请让我知道为什么会这样,或者如果我理解错了,请纠正我。首先,正如
trappski
在评论中指出的那样,writeExternal
没有创造任何东西ObjectOutput
是由调用的任何代码传递给它的参数writeExternal
接口的诀窍在于它们是一个“合同”。不能从接口创建对象,但可以创建实现接口的类,然后从这些类创建对象。然后,您可以在任何需要接口的地方使用实现接口的类的对象
在这种情况下,如果您有一个类BigObjectOutput
,它实现了ObjectOutput
,如下所示:
class BigObjectOutput implements ObjectOutput {
// code...
}
然后可以创建类型为BigObjectOutput
的对象,如下所示:
BigObjectOutput bigObject = new BigObjectOutput;
并将其传递到方法中,因为BigObjectOutput
实现了ObjectOutput
:
writeExternal(bigObject);
class LittleObjectOutput implements ObjectOutput {
// code...
}
LittleObjectOutput littleObject = new LittleObjectOutput();
writeOutput(littleObject);
你为什么要这么做?这样,您就可以传入其类型实现ObjectOutput
的任何对象:
writeExternal(bigObject);
class LittleObjectOutput implements ObjectOutput {
// code...
}
LittleObjectOutput littleObject = new LittleObjectOutput();
writeOutput(littleObject);
因此,如果您的
writeOutput
接受任何类型实现OutputObject
接口的对象,比只接受BigObjectOutput
s的对象更有用。谢谢您的解释@Emma。您的意思是说LittleObjectOutput类扩展了BigObjectOutput实现了ObjectOutput吗{
//代码。。。
}
LittleObjectOutput littleObject=新的LittleObjectOutput()
writeExternal(littleObject)
- 这意味着如果父级和子级都可以使用该函数,则该函数将非常有用
code
No,我的示例是BigObjectOutput
和LittleObjectOutput
都实现了接口。他们不需要互相延伸。这里的关键是,它们都实现了接口,因此都可以在期望该接口的方法中使用。