[英]Class C implements interface B which extends interface A, can you say C implements A?
如果 class C 實現了接口 B 並且接口 B 擴展了接口 A。說 class Z0D61F8340CAD1D41257 實現接口是否正確?
是的。 C 可以覆蓋 A 的方法。
示例:(這不是一個很好的示例,但只是為了表明 C/Chimpanzee 可以覆蓋 A/Animal 的方法)
interface Animal
{
void giveBirth();
}
interface Mammal extends Animal
{
void walk();
}
class Chimpanzee implements Mammal
{
@Override
public void giveBirth()
{
System.out.println("Chimpanzee gives birth.");
}
@Override
public void walk()
{
System.out.println("Chimpanzee walks.");
}
}
即使我同意關於第一部分的公認答案(“是”),我也不同意第二部分“C可以覆蓋A 的方法”。
我相信正確的描述是C必須實現A和B的方法。
例如,如果接口 A 聲明方法 fooA() 而 B 聲明方法 fooB(),則 C 必須同時實現 fooA() 和 fooB()。 從這個意義上說,是的,您可以說 C 實現了接口 A(因為它實現了擴展 A 的接口)。
接受的答案是正確的。 由於 Java 語言中的多態性,這是可能的。 但是,必須了解使用 JVM 指令invokeDynamic
而不是invokeVirtual
對性能的影響。 后者需要在類的虛擬表中進行簡單的查找,而前者需要通過其所有實現者的虛擬方法表進行更深入的遞歸搜索。
是的,您可以說 C 實現了 A。instanceof 運算符在這里非常方便:
public interface B extends A {
public void b();
}
public interface A {
public void a();
}
public class C implements B {
@Override
public void a() {}
@Override
public void b() {}
public static void main(String[] args) {
C c = new C();
System.out.println("C is A? " + (c instanceof A));
System.out.println("C is B? " + (c instanceof B));
}
}
結果將是:
C is A? true
C is B? true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.