这是场景: -
class Canine{
public void roam(){
System.out.println("Canine-Roam");
}
}
public interface Pet{
public abstract void roam();
}
class Dog extends Canine implements Pet{
public void roam(){
System.out.println("Dog Roam");
}
public static void main(String [] args){
Dog adog = new Dog();
adog.roam();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道JVM在选择运行哪种方法时一定不会有任何困惑,这意味着哪种方法会被覆盖.但无论如何我很困惑.为什么这个程序会编译?
不 - 同一个方法在类中不能存在两次.
接口只是声明了一个要求为一个类来实现特定的方法.它实际上并没有创建该方法.
因此,通过继承获取方法实现的类已定义该方法.此(单个)实现满足接口的要求.
在你的情况下:
Dogextends Canine,因此它意味着roam()方法from Canine可用,并且如果不被覆盖,将作为Dog对象的方法公开.Dog则覆盖有自己的定义父类的方法roam().这是允许的,并且仍然只有一个名为明确的方法roam()上Dog-新替换.Dog实现Pet,这意味着它需要一个roam()方法.它确实 - 所以它是这个接口的有效实现.| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |