簡體   English   中英

兩個具有相同方法名稱的接口,當我覆蓋時會發生什么?

[英]Two interfaces with same method name, what happens when I override?

所以我有一個'MyClass'類和兩個接口'A'和'B'

public class MyClass implements A, B {

    @Override
    public void mymethod(){
        System.out.println("hello world");
    }

}

...

public interface A {
    void mymethod();
}

...

public interface B {
    void mymethod();
}

從這個界面覆蓋什么方法被覆蓋?

我在想兩個都是?

謝謝(學生)

在這種情況下,它就像只有一種方法。 在這種情況下,它將覆蓋“兩個”方法,因為它們具有完全相同的簽名。 如果方法有不同的簽名(返回類型或某些東西),那么就會出現問題。 在這里查看這個答案

例如:

public class MyClass implements A, B {

    @Override
    public void mymethod(){
        System.out.println("hello world");
    }

}
...

public interface A {
    void mymethod();
}
...

public interface B {
    String mymethod();
}

這會導致問題......

這既是因為它符合兩個接口。

((A)(new MyClass())).mymethod();
((B)(new MyClass())).mymethod();

輸出

hello world
hello world

測試可能發生的事情很簡單。

如果遇到這種情況,那么A和B之間可能會有一些共同特征被抽象到A和B都擴展的另一個接口,或者它們之間存在不合需要的共享術語導致重疊並且可能需要重命名。

界面只是一個契約。

實現A意味着MyClass應該有一個方法void mymethod()

實現B意味着MyClass應該有一個方法void mymethod()

它凌駕於“兩者”之上,但我不確定這是說出來的正確方法。

這只是填寫合同並確保MyClass具有正確的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM