快速JAVA继承问题

n0p*_*0pe 1 java inheritance

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

谢谢!

Pab*_*ruz 5

回答你的问题(它们都不同):

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总是狗,但狗可能并不总是特殊狗.

  • 第4行有2个错误:构造抽象类的对象和超类赋值 (2认同)