我的讲师对“里斯科夫替代原则”的定义是否正确,还是我误会了?
|
由于(Liskov)替换原理,以下内容确实起作用,该替换原理表示,如果期望引用某个类的实例,则可以将引用替换为该类的任何子类的实例。
public static void main( String[] args ) {
Cat felix = new Cat( );
Object copyCat = felix;
}
现在,据我所知,在这种情况下,我正在创建一个“ 1”对象(因此正在堆中创建内存空间),然后将一个对象引用变量“ felix”分配给新创建的“ 1”。宾语。参考变量的类型为Cat
,因此只能控制Cat
和Cat
的任何子类。
然后,我创建一个类型为Object
的Object
引用变量,并将其指向felix(Cat
)对象,该对象可以工作,但是功能有限,因为JVM现在可以看到类型为object6ѭ的felix对象,因此,例如,如果有一个Cat
类中定义的method10ѭ方法,felix将不再能够使用它。
因此,期望引用类型为Cat
,但是我们为cat类型的超类(而不是上面定义中的子类)提供引用,并且允许这样做,但功能有限(除非您执行投)。
我是正确的还是遥遥无期?
没有找到相关结果
已邀请:
3 个回复
提孺局缎
和
认为Shape2继承Shape1(将\“ width \”属性作为通用属性)是错误的,因为Shape1和Shape2的area()方法会有所不同。
量华
,S为
。当您具有类型T的引用时
替换原理说的是,此引用可以指向类型T的对象或类型T的子类的任何类型S的对象。因此,下列任一条件均有效:
(由于我们在这里使用的是
,根据定义它是任何Java类的超类,因此
引用完全可以指向任何类型的对象。) 我认为这里重要的一点是,引用的类型决定了可以调用哪些方法,而无论实际对象指向的是哪种方法。这就是为什么可以将任何子类的实例分配给引用的原因。
室邢