通过继承和接口可以在类中存在两次相同的方法吗?

Ank*_*kit 1 java interface

这是场景: -

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在选择运行哪种方法时一定不会有任何困惑,这意味着哪种方法会被覆盖.但无论如何我很困惑.为什么这个程序会编译?

And*_*yle 6

不 - 同一个方法在类中不能存在两次.

接口只是声明了一个要求为一个类来实现特定的方法.它实际上并没有创建该方法.

因此,通过继承获取方法实现的类已定义该方法.此(单个)实现满足接口的要求.

在你的情况下:

  1. Dogextends Canine,因此它意味着roam()方法from Canine可用,并且如果不被覆盖,将作为Dog对象的方法公开.
  2. 但随后Dog覆盖有自己的定义父类的方法roam().这是允许的,并且仍然只有一个名为明确的方法roam()Dog-新替换.
  3. Dog实现Pet,这意味着它需要一个roam()方法.它确实 - 所以它是这个接口的有效实现.