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可以掉用父类方法。