如果我有一个名为 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/