0

以下几行是什么意思?

superclass sc = new subclass();
subclass sc = new superclass();

我在我的计算机科学书中看到的第一行实现了,我不知道它是什么意思。超类如何实例化新的子类构造函数?第二行它是如何工作的?我以为子类不继承超类构造函数?

OOP 的新手和困惑。

4

3 回答 3

2

容易 - 第二行无法编译。(提示:写出来,下次试试。)

第一行是有道理的。也许以这种方式阅读会更有帮助?

superclass sup;
subclass sub = new subclass();
sup = sub;

无论如何请注意,您只是简单地创建了一个子类。然后您可以在对超类的引用中保留它,因为子类超类的实例。

请注意,这与构造函数继承无关。构造函数永远不会被继承。

于 2013-05-06T23:38:04.420 回答
2

也许一个例子可以帮助你。以这种方式思考你的两条线:

//Student extends Person

Person p = new Student();
Student s = new Person();

您可以很容易地注意到第一行是正确的,因为Student Person。但并非所有Persons都是Student,所以这就是第二行错误的原因。

于 2013-05-06T23:55:41.983 回答
1

第二行会给出编译错误是对的。

在第一行中,超类保留了子类的实例。在这里我们可以看到“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
    }
}
于 2013-05-07T00:00:43.113 回答