由于(Liskov)替换原则,以下内容确实有效,该原则表示,如果某个类的实例需要引用,那么您可以替换对该类的任何子类的实例的引用。
public static void main( String[] args ) {
Cat felix = new Cat( );
Object copyCat = felix;
}
现在,据我了解,在这种情况下,我正在创建一个Cat
对象(因此正在堆中创建内存空间),然后我将一个名为“felix”的对象引用变量分配给新创建的Cat
对象。引用变量的类型是Cat
,因此只能控制Cat
及其任何子类Cat
。
然后我创建一个Object
type 的引用变量Object
,并将其指向 felix ( Cat
) 对象,该对象可以工作但功能有限,因为 JVM 现在看到 felix 对象的 type Object
,因此,例如,如果purr()
在Cat
类,felix 将无法再使用它。
所以 typeCat
应该有一个引用,但是我们为 cat 类型的超类(而不是上面定义中所说的子类)提供了一个引用,这是允许的,但功能有限(除非你进行强制转换)。
我是正确的还是错误的?