java - 快速JAVA继承问题

标签 java inheritance

如果我有一个名为 Dog 的抽象类,它有一个构造函数来设置它的权重(double)和一个名为 SpecialDog 的类,它扩展了 Dog 并有一个构造函数接受一个 double 并将它传递给 Dog 使用 super ()。

有什么区别(如果有的话):

Dog dog = new SpecialDog(12.0);
SpecialDog dog = new SpecialDog(12.0);
Dog dog = new Dog(12.0);
SpecialDog dog = new Dog(12.0);

谢谢!

最佳答案

回答您的问题(它们各不相同):

Dog dog = new SpecialDog(12.0);

在这里,您正在创建一个 SpecialDog,但使用 Dog 引用指向它。对象一只特殊的狗,但是,除非你向下转换你的dog变量,否则你只能将dog当作一个Dog 而不是 SpecialDog

SpecialDog dog = new SpecialDog(12.0);

在这里,您正在创建一个 SpecialDog,并使用 SpecialDog 引用指向它。

Dog dog = new Dog(12.0);

这是一个编译器错误,因为您无法实例化抽象类。

SpecialDog dog = new Dog(12.0);

这只是一个编译器错误。您不能将父类(super class)分配给子类引用。请记住:继承是一种"is"关系。虽然 SpecialDog 始终是 Dog,但 Dog 可能并不总是 SpecialDog

关于java - 快速JAVA继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048262/

相关文章:

java - 属性缺失 : Android namespace prefix

java - HashSet 和 Set 有什么区别?

java - Spring MVC : Having multiple @ModelAttribute in form handling action

c++ - 在方法中使用自身的接口(interface)

java - 移动迭代器语句使代码编译

python - Django中的多态模型继承

inheritance - 如何在 GraphQL 中继承或扩展 typeDef

C++继承无法识别

java - 访问集合中特定于 "type"类的方法

java - 可访问、跨平台、相关的 UI 框架?