以下几行是什么意思?
superclass sc = new subclass();
subclass sc = new superclass();
我在我的计算机科学书中看到的第一行实现了,我不知道它是什么意思。超类如何实例化新的子类构造函数?第二行它是如何工作的?我以为子类不继承超类构造函数?
OOP 的新手和困惑。
以下几行是什么意思?
superclass sc = new subclass();
subclass sc = new superclass();
我在我的计算机科学书中看到的第一行实现了,我不知道它是什么意思。超类如何实例化新的子类构造函数?第二行它是如何工作的?我以为子类不继承超类构造函数?
OOP 的新手和困惑。
容易 - 第二行无法编译。(提示:写出来,下次试试。)
第一行是有道理的。也许以这种方式阅读会更有帮助?
superclass sup;
subclass sub = new subclass();
sup = sub;
无论如何请注意,您只是简单地创建了一个子类。然后您可以在对超类的引用中保留它,因为子类是超类的实例。
请注意,这与构造函数继承无关。构造函数永远不会被继承。
也许一个例子可以帮助你。以这种方式思考你的两条线:
//Student extends Person
Person p = new Student();
Student s = new Person();
您可以很容易地注意到第一行是正确的,因为Student 是Person。但并非所有Persons都是Student,所以这就是第二行错误的原因。
第二行会给出编译错误是对的。
在第一行中,超类保留了子类的实例。在这里我们可以看到“IS a”的关系。例如
class Animal {}
class Dog extends Animal {}
class TestCode {
public static void main(String[] args) {
Animal a=new Dog(); // here a contains the instance of Dog
}
}