1. 程式人生 > >介面與抽象類的關係

介面與抽象類的關係

今天看程式碼的時候,發散了一下抽象類與介面之間的實現與繼承關係。這裡就不羅列什麼是介面和抽象類了。在這裡理下一他們的關係:

  1. 普通類可以實現多個介面,但是隻能單繼承一個抽象類
  2. 抽象類可以實現多個介面,但是隻能單繼承一個類(普通類、抽象均可)
  3. 介面可以繼承多個介面,但是不能繼承類(普通類、抽象均不可)-其實這個介面繼承類的說法就不對,介面是對行為的抽象,抽象類是對類的抽象,兩都不能混在一起看,所以你想用介面去繼承類,那感覺就是喝葡萄酒加雪碧。
  4. 抽象類與普通類沒什麼區別,唯一的區別是抽象類不能例項化物件,可以有抽象方法。
  5. 普通類繼承和實現介面的時候,必須把他們的方法全部實現,如果不全部實現,那麼自己會變能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 class 
Q{ //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() @Override
public 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{ } */