问题描述
- JAVA 方法覆盖问题
-
下面代码中 1:Auto auto = new Car()为什么这么写 ;
2:auto.fun(); 输出的值为什么是a poor engine父类的engine方法不是已经被子类重写了吗?是super的作用?
public class Auto {
public void engine() { System.out.println("a poor engine"); } public void fun() { System.out.println("Driving fun"); }
}
public class Car extends Auto {
public String name = "a nice car";public void engine() { System.out.println("a nice engine"); } public void fun() { super.engine(); } public static void main(String[] args) { Auto auto = new Car(); auto.fun(); auto.engine(); }
}
解决方案
1、Auto auto = new Car(); 你也可以Car auto = new Car(), car是子类,类型用父类也没什么问题。
2、子类中多加一句print就知道会先调用子类的,因为子类用用super指明了调用父类的engine,所以会调用父类的engine,打印出a poor engine
public void fun() {
System.out.println("fun");
super.engine();
}
解决方案二:
是super的作用,java中this指当前对象,super是调用父对象,当子类覆盖父类的方法时,使用super可以掉用父类方法。
时间: 2024-08-23 15:05:41