標籤:
抽象類別和介面一、抽象類別(abstract)
1.抽象類別
Java可以定義一些不含方法體的方法,它的方法體交給該類的子類根據自己的情況去實現,這樣的方法就是抽象方法,包含抽象方法的類叫抽象類別。一個抽象類別中可以有一個或者多個抽象方法。
抽象防範必須用abstract修飾符來定義,任何帶有抽象方法的類都必須聲明為抽象類別。
(1)抽象類別定義規則
a.抽象類別必須用abstract關鍵字來修飾,抽象方法也必須用abstract來修飾;
b.抽象類別不能被執行個體化,也就是不能用new關鍵字去產生對象;
c.抽象方法只需聲明,而不需要實現;
d.含有抽象方法的類必須被聲明為抽象類別,抽象類別的子類必須覆蓋所有的抽象方法後才能被執行個體化,否則這個子類還是一個抽象類別。
2.抽象方法的寫法
abstract 傳回值類型 抽象方法(參數列表);
3.抽象類別和抽象方法的例子
1 abstract class Abs{2 abstract int aa(int x,int y);3 }
注意:含有抽象方法的類肯定是抽象類別,抽象類別中的某個抽象方法不一定是抽象的。
二、介面(interface)
1.介面
如果一個抽象類別中的所有方法都是抽象的,就可以將這個類用另外一種方式來定義,也就是介面定義。介面是抽象方法和常量值的定義的集合,從本質上來講,介面是一種特殊的抽象類別,中抽象類別只包含常量和方法的定義,而沒有變數和方法的實現。
2.介面定義的例子
1 interface Runner{2 int ID = 1;3 void run();4 }
在介面Runner的定義中,及時沒有顯式地將其中的成員用public關鍵字標識,但是這些成員都是public訪問類型的。介面裡的變數預設是用public static final 標識的,所以,介面中定義的就是全域變數。
我們可以定義一個新的介面,用extends關鍵字去繼承一個已有的介面;也可以定義一個類,用implements關鍵字去實現一個介面中的所有方法;還可以去定義一個抽象類別,用implements關鍵字去實現一個介面中定義的部分方法。
1 //定義一個介面 2 interface Runner{ 3 int ID = 1; 4 void run(); 5 } 6 //可以定義一個新的介面,用extends關鍵字去繼承一個已有的介面 7 interface Animal extends Runner{ 8 void breathe(); 9 }10 //可以定義一個類,用implements關鍵字去實現一個介面中的所有方法11 class Fish implements Animal{12 public void run() {13 System.out.println("fish is swimming");14 }15 16 public void breathe() {17 System.out.println("fish is bubbling");18 }19 }20 21 //可以去定義一個抽象類別,用implements關鍵字去實現一個介面中定義的部分方法。22 abstract class LandAnimal implements Animal{23 public void breathe(){24 System.out.println("LandAnimal is breathing");25 }26 }
在Java中,設計介面的目的就是為了讓類不必受限於單一繼承的關係,而可以靈活地同時繼承一些共有的特性,從而達到多重繼承的目的,並且避免了C++中多重繼承的複雜關係所產生的問題。多重繼承的危險性在於一個類可能繼承了同一個方法的不同實現,對介面來講不會發生這種情況,因為介面沒有任何實現。
一個類可以在繼承一個父類的同時,實現一個或多個介面,extends關鍵字必須位於implements關鍵字之前。如下:
1 class Student extends Person implements Runner{2 public Student(int age) {3 super(age);4 }5 6 public void run() {7 System.out.println("the student is running");8 }9 }
一個類實現多個介面的例子:
1 class Bird implements Runner,Flyer{2 public void run() {3 System.out.println("the bird id running");4 }5 public void fly() {6 System.out.println("the bird is flying");7 }8 }
下面是介面中定義常量的執行個體:
1 public class TestDebug11 {2 public static void main(String[] args) {3 Fish fish = new Fish();4 int j = 0;5 j = Runner.ID;//格式:類.成員變數6 j = fish.ID; //對象名.靜態成員7 }8 }
3.小結:
a.實現一個介面就是要實現該介面的所有方法(抽象類別除外);
b.介面中的方法都是抽象方法;
c.多個無關的類可以實現同一個介面,一個類可以實現多個無關的介面。
Java抽象類別和介面