我正在查看由其他人编写的旧代码,然后发现有一个类实现了接口,但没有实现接口中声明的所有方法。

当我尝试使用eclipse在接口中查找方法的实现时,我发现了这一点(突出显示该方法并执行ctl + Shit + G =在工作空间中未找到实现)。
仔细研究代码,我发现该方法的实现实际上是从该类扩展的另一个Abstract类继承的。

这是我在说的简单版本:

interface myInterface{
    int needsTobeImplemeted(int x);
}

abstract class myAbstractClass{
    int needsTobeImplemeted(int x){
        return x;
    }
}

class myClass extends myAbstractClass implements myInterface
{

}


从主打印中调用该方法=>结果:0

public static void main(String[] args) {
    myInterface interfaceType = new myClass();
    System.out.println("result: " + interfaceType.needToBeImplemeted(0));
}


我的问题是这怎么可能?如果myClass覆盖该方法,将会发生什么:

@override
int needsTobeImplemeted(int x){
    return x*x;
}


它正在实现哪种方法,接口中的on或Abstract类中的on?
顺便说一下,扩展类不必是抽象类,而可以是普通类。如果它具有与myInterface中定义的签名相同的方法,就足够了。

任何解释将不胜感激;)

覆盖myClass中的方法:

public class myClass extends myAbstractClass implements myInterface {

  @Override
  public int needToBeImplemeted(int x)
  {
    return x*x;
  }
}


public static void main(String[] args) {
    myClass classType = new myClass();
    myAbstractClass abstractType = new myClass();
    myInterface interfaceType = new myClass();

    System.out.println("result: " + classType.needToBeImplemeted(2));
    System.out.println("result: " + abstractType.needToBeImplemeted(2));
    System.out.println("result: " + interfaceType.needToBeImplemeted(2));
}


结果:

结果:4

结果:4

结果:4

最佳答案

现在正在执行哪种方法,界面中的on或
一个抽象类?


该类根本没有“实现”方法。它“实现”一个接口。实现接口只是意味着“拥有该接口描述的所有方法”。

定义该方法在类或其继承树中的哪个位置都没有关系。因此,如果要实现在接口或抽象方法中找到的方法,也没有什么不同。唯一重要的是是否存在具有该签名的方法。

10-08 04:48