如果我有一个名为Dog 的抽象类,它有一个构造函数来设置它的权重(double)和一个名为SpecialDog的类,它扩展了Dog并且有一个接受double的构造函数并使用super()将它传递给Dog.
什么(如果有的话)之间的区别是:
Dog dog = new SpecialDog(12.0);
SpecialDog dog = new SpecialDog(12.0);
Dog dog = new Dog(12.0);
SpecialDog dog = new Dog(12.0);
Run Code Online (Sandbox Code Playgroud)
谢谢!
回答你的问题(它们都不同):
Dog dog = new SpecialDog(12.0);
Run Code Online (Sandbox Code Playgroud)
在这里,您正在创建一个SpecialDog,但使用Dog引用指向它.这个对象是一只特殊的狗,但是,除非你贬低你的dog变量,否则你只能被dog视为一个Dog而不是一个SpecialDog.
SpecialDog dog = new SpecialDog(12.0);
Run Code Online (Sandbox Code Playgroud)
在这里,您将创建一个SpecialDog,并使用SpecialDog引用指向它.
Dog dog = new Dog(12.0);
Run Code Online (Sandbox Code Playgroud)
这是一个编译器错误,因为您无法实例化抽象类.
SpecialDog dog = new Dog(12.0);
Run Code Online (Sandbox Code Playgroud)
这只是一个编译器错误.您不能将超类指定给子类引用.记住:继承是一种"是一种"关系.虽然SpecialDog总是狗,但狗可能并不总是特殊狗.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |