以下几行意味着什么?
superclass sc = new subclass();
subclass sc = new superclass();
我见过的第一行是在我的计算机科学书中实现的,我不知道它意味着什么。 超类如何实现新的子类构造函数? 第二行它甚至是如何工作的?我以为该子类不继承超类构造函数?
OOP的新手并且很困惑。
答案 0 :(得分:2)
简单 - 第二行无法编译。 (提示:写出来并在下次尝试。)
第一行是有道理的。也许以这种方式阅读会有所帮助吗?
superclass sup;
subclass sub = new subclass();
sup = sub;
在任何情况下,请注意您只是简单地将 make 作为子类。然后你可以在对超类的引用中保留它,因为子类是超类的实例。
注意这与构造函数继承有 nothing 。构造函数从不继承。
答案 1 :(得分:2)
也许一个例子可以帮助你。以这种方式思考你的2行:
//Student extends Person
Person p = new Student();
Student s = new Person();
您可以很容易地注意到第一行是正确的,因为学生 人。 但并非所有人都是学生,所以这就是第二行错误的原因。
答案 2 :(得分:1)
第二行会出现编译错误。
在第一行中,超类保留子类的实例。在这里,我们可以看到“是一种”关系。例如
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
}
}