假设我有一个名为 Person 的父类(super class),带有私有(private)实例变量 name 和age,还有一个名为 Student 的子类,它添加了一个名为 school 的实例变量。 我的父构造函数是:
public Person(String name, int age) {
this.name = name;
this.age = age;
}
我的子构造函数是:
public Student(String name, int age, String school) {
super(name, age);
this.school = school;
}
我可以通过以下方式使用 Student 构造函数创建一个对象:
Student test = new Student("Joe", 20, "StackOverflow");
Person test = new Student("Joe", 20, "StackOverflow");
我不确定在这种情况下或在一般情况下有什么区别,或者是否比另一个具有某些优势。
最佳答案
在这样的小程序中,很难看到继承的好处,特别是以同样的方式创建学生和个人的能力。
但是,请想一想,您有一个排序算法,可以对“Person”类型进行排序,并且仅对该类型进行排序。
Person p = new Person(name, age);
ArrayList<Person> list = new ArrayList<Person>();
Sort(list);
其中排序方法仅采用 Person 类型的列表。
后来您意识到能够对学生进行排序会很好,但您不想重写排序算法。由于您的排序算法仅针对“人”类型进行编码,因此您现在可以将学生传递进去,但包含在人中。您还可以重写比较方法,以不同的方式对学生进行分类。这是一个简单的例子,还有更多。
Person s = new Student(name, age, school);
list.add(s);
Sort(list);
以上内容均有效,您无需重写代码。 (假设姓名、年龄和学校是正确的类型等......)。
关于java - 使用子类的类型或其父类(super class)的类型创建子类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598884/