![](/img/trans.png)
[英]Is the abstract method in the interface Inter is same with the abstract method in the abstract class Test?
[英]Same method in Interface and Abstract class
我來到情況:
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.
}
}
您同時滿足這兩個條件; 即。 一種實現是同時滿足抽象類要求和接口要求。
請注意,除非您在另一個繼承鏈中使用Intr
,否則不需要它。 另外,將implements Intr
移至抽象類定義可能很有意義。
您只能覆蓋另一個類中定義的方法。
接口中聲明的方法僅被實現。 Java中存在此區別以解決多重繼承問題。 一個類只能擴展一個父類,因此任何對super
調用都將被明確地解決。 但是,類可以實現多個接口,這些接口都可以聲明相同的方法。 最好將接口視為“必須具備”的列表:要獲得可Comparable
的資格,您的主管必須具有compareTo()
方法,但無論它來自何處或其他接口要求使用哪種方法都無關緊要。
因此,從技術上講,您可以Abs.m1()
重寫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
}
這里的接口和抽象類都具有相同的方法。
您有一個類名是hello,並消除了抽象類,並實現了它的true,並且在hello類上重寫了meth1方法,它很好並且可以正確編譯,並且沒有給出任何錯誤,但是她無法像抽象類那樣標識哪個類方法被重寫或界面。
這是運行時多態,您不能創建抽象類和接口的對象,但是可以創建其引用變量。 這里的解決方案是您無法在編譯時確定其在運行時的實際覆蓋率。
interface hi
{
public void meth1();
}
abstract class Hullo
{
public abstract void meth1();
}
public class Hello extends Hullo implements hi
{
public void meth1(){
System.out.println("hello");
}
hi h= new Hello();
h.meth1();//its means interface method is override. and its decide when we call method.
hullo hu= new Hello();
hu.meth1();//its means abstract class method is override.
}
@Override
確保您無差別地重寫該方法Interface或抽象超類。 因此,覆蓋沒有錯誤。
另一方面,在超類中也實現了接口方法,這對於接口協定已經足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.