Dog类实现了Animal接口,Animal a = new Dog(); 创建子类对象,a指向的应该是一个Dog类的对象,a.bark(d); 调用的应该是Dog重载的bark方法才对,可为什么最终调用的还是接口Animal的方法呢。
public interface Animal {
default void bark(Animal a) {
System.out.println("Animal");
}
}
public class Dog implements Animal {
// Overload
public void bark(Dog d) {
System.out.println("Dog");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
Dog d = new Dog();
a.bark(a); // Animal
a.bark(d); // Animal
d.bark(a); // Animal
d.bark(d); // Dog
}
}