Interface和Abstract类中的方法相同

Nan*_*ale 17 java

我来到了这种情况:

public interface Intr {
    public void m1();
}

public abstract class Abs {
    public void m1() {
        System.out.println("Abs.m1()");
    }
    // public abstract void m1();
}

public class A extends Abs implements Intr {

    @Override
    public void m1() {
        // which method am I overriding, well it is Abs.m1() but why?
        // if method implemented is Abs.m1(), then why I am not getting error for Intr.m1() not implemented.
    }

}
Run Code Online (Sandbox Code Playgroud)

hvg*_*des 26

你一次满足这两个条件; 即.一个实现同时满足抽象类要求和接口要求.

请注意,除非您Intr在另一个继承链中使用,否则您不需要它.此外,将implements Intr向上移动到抽象类定义可能是有意义的.


biz*_*lop 5

您只能覆盖另一个类中定义的方法.

仅在接口中声明的方法被实现.Java中存在这种区别,以解决多重继承问题.一个类只能扩展一个父类,因此任何调用都super将在没有歧义的情况下得到解决.但是,类可以实现多个接口,这些接口都可以声明相同的方法.最好将接口视为"必须拥有"的列表:要符合条件,Comparable您必须拥有一个compareTo()方法,但无论它来自何处或其他接口需要相同的方法.

所以从技术上讲,你一举超越Abs.m1()并实施Intr.m1().

请注意,这也没关系:

public class B extends Abs implements Intr {

    //m1() is inherited from Abs, so there's no need to override it to satisfy the interface
}
Run Code Online (Sandbox Code Playgroud)

  • 所以?这只是一个注释,可以更容易地找到某种类型的错误,但它不是语言的一部分.如果您愿意,可以在不使用`@Override`注释的情况下覆盖方法. (2认同)