介面與抽象類的關係
阿新 • • 發佈:2019-01-08
今天看程式碼的時候,發散了一下抽象類與介面之間的實現與繼承關係。這裡就不羅列什麼是介面和抽象類了。在這裡理下一他們的關係:
- 普通類可以實現多個介面,但是隻能單繼承一個抽象類
- 抽象類可以實現多個介面,但是隻能單繼承一個類(普通類、抽象均可)
- 介面可以繼承多個介面,但是不能繼承類(普通類、抽象均不可)-其實這個介面繼承類的說法就不對,介面是對行為的抽象,抽象類是對類的抽象,兩都不能混在一起看,所以你想用介面去繼承類,那感覺就是喝葡萄酒加雪碧。
- 抽象類與普通類沒什麼區別,唯一的區別是抽象類不能例項化物件,可以有抽象方法。
- 普通類繼承和實現介面的時候,必須把他們的方法全部實現,如果不全部實現,那麼自己會變能abstract類,即抽象類。
// interface Quest public interface Quest { void embark(); } //interface C interface C{ void ark(); } //abstract class A abstract class A{ //abstract method abstract void methodA(); //instance method void method(){ System.out.println("abstract classA's instance method!"); } } //abstract class D abstract classQ{ //abstract method abstract void methodQ(); //instance method void method(){ System.out.println("abstract classD's instance method!"); } } //一個類可以實現多個介面,但是隻能單繼承一個類(包括抽象類) class B extends A implements Quest, C{ //interface Quest.embark() @Override public void embark() { } //interface C.ark() @Overridepublic void ark() { } //abstract A.methodA() @Override void methodA() { } } //抽象類可以實現多個介面 abstract class K implements Quest, C{ } //介面可以繼承多個介面 interface X extends Quest, C{ } /* //一個類不能繼承多個類class B extends A, D{ } //介面不能繼承抽象類interface I extends K{ } */