用子类的类型或其父类的类型创建子类对象

t3rrh42d2

假设我有一个名为Person的超类,该类具有私有实例变量的名称和年龄,以及一个名为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);

其中sort方法仅采用Person类型的列表。

后来您意识到能够对学生进行排序会很好,但是您不想重写排序算法。由于您的排序算法仅针对“人员”类型进行编码,因此您现在可以将一个学生传递但包含在一个人中。您还可以覆盖比较方法,以对学生进行排序而不是对人进行排序。这是一个简单的示例,还有更多示例。

Person s = new Student(name, age, school);
list.add(s);
Sort(list);

以上都是有效的,您不必重写任何代码。(假设姓名,年龄和学校是正确的类型,等等。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用子类型初始化父类中的对象

来自分类Dev

创建一个基类与子类的静态类型的对象?

来自分类Dev

子类可以创建抽象的超类类型的对象吗?

来自分类Dev

超类类型对象的子类的构造方法?

来自分类Dev

扩展类型以创建子类型

来自分类Dev

在继承中,当为子类创建对象时,是否也为其父类创建了对象?

来自分类Dev

从模板类获取“子类型”

来自分类Dev

实现函子类型类

来自分类Dev

超类类型的对象无法访问子类的方法

来自分类Dev

C ++子类与它们自己的类型及其父类是否相同?

来自分类Dev

创建 2 个相同的不同子类型的类

来自分类Dev

访问类型是泛型类的子类型?

来自分类Dev

从原始字节创建正确子类型的对象实例

来自分类Dev

将子类中的对象放入超类类型的数组后如何调用子类方法?

来自分类Dev

在超类类型的对象上强制转换返回java中子类类型的对象

来自分类Dev

复合类型的子类型

来自分类Dev

Swift子类复杂子类型

来自分类Dev

Kotlin类型,子类型和超类型与类,子类和超类

来自分类Dev

如何使用返回类型作为超类的任何子类型创建方法

来自分类Dev

如何在Kotlin中使用返回带有类型参数的子类型的方法创建类?

来自分类Dev

具体类型的Java包装器类子类

来自分类Dev

为类型类的子类定义方法

来自分类Dev

从模板类继承,在子类中声明类型

来自分类Dev

对子类实例使用超类类型

来自分类Dev

如何绑定子类的类类型

来自分类Dev

抽象类的具体子类的Typescript类型

来自分类Dev

从父类方法返回子类的类型

来自分类Dev

在子类Java中更改类变量类型

来自分类Dev

如何使类的子类返回正确的Java类型

Related 相关文章

热门标签

归档