Java超詳細(xì)介紹抽象類與接口的使用
1.抽象類的語法和特性
1.1語法
1.在Java中,一個類如果被abstract 修飾稱為抽象類,抽象類中被 abstract 修飾的方法稱為抽象方法,抽象方法不用給出具體的實現(xiàn)體。
// 抽象類:被abstract修飾的類 public abstract class Shape { // 抽象方法:被abstract修飾的方法,沒有方法體 abstract public void draw(); abstract void calcArea(); // 抽象類也是類,也可以增加普通方法和屬性,也可以包含構(gòu)造方法 public double getArea() { return area; } protected double area; // 面積 }
1.2特性
1. 抽象類不能直接實例化對象
Shape shape = new Shape(); // 編譯出錯 -> 抽象類不能被實例化
2. 抽象方法不能是 private 的
abstract class Shape { abstract private void draw(); } // 編譯出錯 -> 抽象方法不能用private修飾
注意:抽象方法沒有加訪問限定符時,默認(rèn)是public.
3. 抽象方法不能被 final 和 static 修飾,因為抽象方法就是用來被子類重寫的,兩者是”天敵“;
public abstract class Shape { abstract final void methodA(); abstract public static void methodB(); } // 編譯報錯: final和static修飾抽象方法,會出問題,二者屬于”天敵“
4. 抽象類必須被繼承,并且繼承后子類要重寫父類中的抽象方法,否則子類也是抽象類,必須要 使用 abstract 修飾
abstract class Shape { abstract void draw(); abstract public void calcArea(); } //1.實現(xiàn)抽象方法 class Cycle extends Shape { @Override void draw() { System.out.println("●"); } @Override public void calcArea() { System.out.println("Π*r*r"); } } //2.不實現(xiàn)抽象父類的抽象方法,但是將子類也定義為抽象類 abstract class Triangle extends Shape { }
5. 抽象類中不一定包含抽象方法,但是有抽象方法的類一定是抽象類
6. 抽象類中可以有構(gòu)造方法,供子類創(chuàng)建對象時,初始化父類的成員變量
2.接口的語法和使用
2.1語法
1.接口的定義格式與類的定義差不多,只要把class改成interface關(guān)鍵字即可。
public interface IOperation { public abstract void method1(); public void method2(); abstract void method3(); void method4(); }
接口名的的注意事項:1.接口的命名一般以大寫的 "I" 開頭;2.接口的名字一般使用形容詞性單詞
推薦:阿里編碼規(guī)范中約定, 接口中的方法和屬性不要加任何修飾符號, 保持代碼的簡潔性。
2.2特性
1.接口不能直接使用,必須要被一個類來 "實現(xiàn)",并且這個類要實現(xiàn)這個接口中的所有抽象方法
public interface IOperation { public abstract void method1(); abstract void method2(); } class A implements IOperation { //如果不重寫接口中的抽象方法,代碼在編譯期間就會報錯 //如果不想重寫,那么這個類一定是抽象類 @Override public void method1() { } @Override public void method2() { } }
2.接口與接口之間是繼承(extends)關(guān)系,類與接口之間是實現(xiàn)關(guān)系(implements)關(guān)系
public interface IOperation { } class A implements IOperation { } interface Io extends IOperation { }
3.接口類型是一種引用類型,不能實例化對象
4.接口中每一個方法都是public的抽象方法, 即接口中的方法會被隱式的指定為 public abstract(只能是public abstract,其他修飾符都會報錯)
public interface IOperation { private void method() { } //編譯報錯 }
5. 接口中的方法是不能在接口中實現(xiàn)的,只能由實現(xiàn)接口的類來實現(xiàn)
public interface IOperation { void method(); //編譯報錯:接口中的方法不能自己實現(xiàn) public abstract void A() { } }
6. 重寫接口中方法時,不能使用 default 訪問權(quán)限修飾 7. 接口中可以含有變量,但是接口中的變量會被隱式的指定為 public static final 變量,不能改變
interface IA{ double a = 3.0; // 默認(rèn)被:final public static修飾 } public class TestDemo { public static void main(String[] args) { System.out.println(IA.a); // 可以直接通過接口名訪問,說明是靜態(tài)的 //編譯報錯 IA.a = 2.0; // 說明brand具有final屬性 } }
8. 接口中不能有靜態(tài)代碼塊和構(gòu)造方法
interface USB { // 編譯失敗:接口中不能有構(gòu)造方法 public USB(){ } {} // 編譯失敗:接口中不能有實例代碼塊 void openDevice(); void closeDevice(); }
到此這篇關(guān)于Java超詳細(xì)介紹抽象類與接口的使用的文章就介紹到這了,更多相關(guān)Java抽象類與接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java調(diào)用微信接口實現(xiàn)網(wǎng)頁分享小功能
這篇文章主要為大家詳細(xì)介紹了java調(diào)用微信接口實現(xiàn)網(wǎng)頁分享小功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04java實現(xiàn)html轉(zhuǎn)pdf方法步驟
這篇文章主要給大家介紹了關(guān)于java實現(xiàn)html轉(zhuǎn)pdf方法的相關(guān)資料,要將HTML轉(zhuǎn)換成PDF,我們需要借助Java中的第三方庫,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08