【发布时间】:2019-09-26 16:59:33
【问题描述】:
我正在学习多态性,但无法理解它是如何工作的
当我尝试创建对象Car car = new Audi(); 时,覆盖打印“这是奥迪”。但是对于相同的对象,我无法调用Audi 类的first(int x, int y)... 我只能调用Car 类first()。
Overriding 打印 Audi 方法,Overloading 打印 Car 方法.. 使用相同对象调用时..
类车
class Car {
public void carName() {
System.out.println("Parent of car");
}
public int first() {
System.out.println("Base - Parent");
return 2;
}
}
宝马级
class BMW extends Car {
public void carName() {
System.out.println("This is BMW");
}
public int first(int x) {
System.out.println("BMW override");
return x;
}
}
奥迪级
class Audi extends BMW {
public void carName() {
System.out.println("This is Audi");
}
public int first(int x, int y) {
System.out.println("AUdi Override");
return x;
}
}
类PloyMor
public class PolyMor extends Audi {
public static void main(String args[]) {
Car car = new Audi();
car.carName();
car.first();
}
}
【问题讨论】:
-
为什么奥迪扩展宝马而不是汽车?
-
方法
first()和first(int, int)是完全不同的、不相关的方法。对于编译器来说,它们具有相同的名称几乎是无关紧要的。而且,由于您在Car上没有first(int, int)方法,因此当使用您声明为Car的对象时,唯一可用的方法是无参数版本。 -
@OldProgrammer 我也试过了..但输出仍然相同..即使奥迪扩展汽车,汽车对象也会打印奥迪类 carName() 方法但无法调用方法重载..仍然只能调用 Car 的 first() 方法..
-
@resueman 哦,好吧,我想我慢慢来了……谢谢!
-
Audi 扩展 BMW 没有意义,您正在使用 first(int x, int y) 重载 first() 方法,并且它是在特定车型中定义的,Car 本身没有该方法。
标签: java