我来到了这种情况:
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向上移动到抽象类定义可能是有意义的.
您只能覆盖另一个类中定义的方法.
仅在接口中声明的方法被实现.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)
| 归档时间: |
|
| 查看次数: |
11367 次 |
| 最近记录: |