Java 抽象類和介面
阿新 • • 發佈:2020-09-08
抽象類
抽象類就是指在普通類的結構裡面增加抽象方法的組成部分。
擁有抽象方法的類一定屬於抽象類,抽象類要使用abstract宣告。
抽象類不能例項化。
抽象類必須有子類,子類如果不是抽象類,那麼必須覆寫抽象類的全部抽象方法。
任何類中存在static方法的時候可以不需要例項化直接呼叫方法(類.static方法)
介面
如果一個類之中只是由抽象方法和全域性常量所組成,那麼在這種情況下不能定義為抽象類,只能定義為介面。
定義介面:
interface A { //全域性常量 public static final String STR = "Hello World!"; //抽象方法 public abstract void fun(); }
介面存在抽象方法,不能直接例項化。
- 介面必須存在子類,此時一個子類可以使用implements關鍵字實現多個介面;
- 介面的子類如果不是抽象類,必須覆寫介面中的全部抽象方法;
- 介面的對像可以利用子類物件的向上轉型操作實現。
package com.testInterface; interface A { public static final String STR = "Hello World"; public abstract void funA(); } interface B { public abstract void funB(); } class X implements A,B { //實現介面A的抽象方法 public void funA() { System.out.println("A介面的抽象方法"); } //實現介面B的抽象方法 public void funB() { System.out.println("B介面的抽象方法"); } } public class TestDemo { public static void main(String[] args) { X x =new X(); System.out.println(x instanceof A); System.out.println(x instanceof B); System.out.println(x instanceof X); } }
結果
true
true
true
物件x即是X類,也是A、B介面。
如果子類除了介面之外,還要繼承抽象類,語法先使用extends繼承,而後使用implements實現。
class X extends C implements A,B
對於介面而言,只有抽象方法和全域性常量,並且在方法上是否寫public結果都一樣,
全域性常量也可以不寫public static final
下面兩種介面的定義完全相同。
interface A { public static final String STR = "Hello World"; public abstract void funA(); } interface A { String STR = "Hello World"; void funA(); }
一個抽象類可以繼承一個抽象類,一個介面卻可以使用extends同時繼承多個介面(但是介面不能繼承抽象類,因為如果繼承抽象類的話就必須實現其中的抽象方法,而介面中只能是抽象方法)。
- 介面的主要功能是解決單繼承侷限問題。
- 接口裡面可以定義普通內部類,抽象內部類 ,內部介面。
- 在一個接口裡面如果使用了static去定義一個內部介面表示是一個外部介面。
介面在實際的開發中的三大核心作用:
- 定義不同層之間的操作標準;
- 表示一種操作能力;
- 表示將伺服器端的遠端方法檢視暴露給客戶端。