Java中抽象類和接口介紹
1、抽象類
1.1 什么是抽象類?
1.1.1 對抽象類的理解
1.1.2 關于抽象類
類與類之間具有共同特征,將這些共同特征提取出來,形成的就是抽象類;
類本身是不存在的,屬于抽象類無法創(chuàng)建對象【無法實例化】;
抽象類是用來被子類繼承的;
finial關鍵字和abstract關鍵字不能同時出現(xiàn);
抽象類的子類可以是抽象類;
抽象類雖然無法實例化,但有構造方法,這個構造方法是供子類使用的;
接口一般描述的是行為動作信息
一個非抽象的類繼承抽象類,必須把抽象類中的抽象方法給實現(xiàn)(覆蓋、重寫)了
public class HelloWorld{ public static void main(String[] args){ //如何實現(xiàn)多態(tài)呢??? Animal a = new Bird();//向上轉型(自動類型轉換) //面對抽象對象編程,降低程序的耦合度,提供程序的擴展力,符合OCP原則 } } abstract class Animal{ public abstract void move(); } class Bird extends Animal{ public void move(){ }//Bird不是抽象類,必須實現(xiàn)父類的抽象方法 }//如果Bird是抽象類的話,那么繼承過來的抽象方法可以不去重寫、覆蓋、實現(xiàn)
1.2 抽象類屬于什么類型?
抽象類也屬于引用數據類型;
1.3 抽象類怎么定義?
[修飾符列表] abstract class 類名{
類體;
}
1.4 抽象方法
1)抽象方法表示沒有實現(xiàn)的方法,沒有方法體,以分號結尾的方法。例如:
public abstract void doSome();
2)抽象類中不一定有抽象方法,但抽象方法一定在抽象類當中;
3)沒有方法體的方法不一定都是抽象方法,Object類中就有很多方法都沒有方法體,以" ;"結尾 e.g.:public native int hashCode();這個方法底層調用了C++寫的動態(tài)鏈接庫程序;前面修飾符列表中有native,表示調用JVM本地程序
2、接口
2.1 關于接口
1)接口也是一直引用數據類型,
2)接口的完全抽象的(抽象類是半抽象類)或者也可以說接口是特殊的抽象類;
3)接口支持接口繼承也支持接口多繼承;
interface A{ } interface B{ } interface C extends A,B{ }
4)接口中只包含兩部分內容,一部分是常量,另一部分是抽象方法,所有內容都是public修飾的,都是公開的;
5)接口中抽象方法中的public static 可以省略,"
public abstract int sun(int a,int b);" ——> "int sun(int a,int b);"
6)接口中變量中的public static final 可以省略,"
public static final double PI = 3.1415926;" —> "double PI = 3.1415926;;"
7)接口中的方法都是抽象方法,所以接口中的方法都沒有方法體;
2.2 接口怎么定義?
[修飾符列表] interface 接口名{
}
2.3 接口基礎語法
1)類和類之間叫做繼承,類和接口之間叫做實現(xiàn)(可看作繼承),用關鍵字"implements";
2)當一個非抽象的類實現(xiàn)接口的話,必須將接口中所有的抽象方法全部實現(xiàn)(覆蓋、重寫);
public class interface { public static void main(String[] args) { //如何實現(xiàn)多態(tài)??? //父類型的引用指向子類型的對象 MyMath m = new MyMathImp(); //調用接口里面的方法(面向接口編程) int result = m.sum(10,2); System.out.println(result); } } interface MyMath{ double PI = 3.1415926; int sum(int a,int b); int sub(int a,int b); } class MyMathImp implements MyMath{ public int sum(int a,int b){//重寫接口中的抽象方法 return a + b; } public int sub(int a,int b){//重寫接口中的抽象方法 return a - b; } }
注意:非抽象的類實現(xiàn)接口時重寫的抽象方法public不可??;
3)一個類可以實現(xiàn)多個接口,這種機制彌補了"java中類和類只支持單繼承"帶來的缺陷;
接口和接口之間在進行強制類型轉換的時候,沒有繼承關系,也可以強轉,但運行的時候可能會出現(xiàn)ClassCastException異常,需要加instanceof進行判斷;
public class HelloWorld{ public static void main(String[] args) { //如何實現(xiàn)多態(tài)??? A a = new C(); if(a instanceof B){ B b2 = (B)a;//此時a b的底層都是C,C實現(xiàn)了接口A和接口B,所以可以向下轉型 b2.m2(); } M m = new E(); if(m instanceof K){ K k = (K)m;//這里的E()和K沒有關系,E實現(xiàn)了M,但沒有實現(xiàn)接口K,所以不能向下轉型 k.m3(); } } } interface A{ void m1(); } interface B{ void m2(); } class C implements A,B{//C實現(xiàn)了A和B public void m1(){ ? } public void m2(){ System.out.println("可以向下轉型!"); } } ? interface K{ void m3(); } interface M{ void m4(); } class E implements M{//E實習了M,但沒有實現(xiàn)K public void m3(){ } public void m4(){ } ?
4)繼承和實現(xiàn)都存在的話,代碼怎么寫?
extends關鍵字在前,implements關鍵字在后
public class interface{ public static void main(String args[]){ //創(chuàng)建對象 Flyable f = new Cat(); f.fly(); } } //動物類:父類 class Animal{ } //可飛翔的接口(是一對翅膀) //能插拔的就是接口。 //接口提取的是行為動作 interface Flyable{ void fly(); } //動物類子類:貓 //Flyable是一個接口,是一個翅膀的接口,通過接口插到貓身上,讓貓可以飛翔 class Cat extends Animal implements Flyable{ public void fly(){ System.out.println("貓會飛"); } }
總結
到此這篇關于Java中抽象類和接口介紹的文章就介紹到這了,更多相關Java抽象類和接口內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java復制(拷貝)數組的4種方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRa
這篇文章主要介紹了Java復制(拷貝)數組的4種方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01form-data與x-www-form-urlencoded的區(qū)別以及知識延伸
這篇文章主要給大家介紹了關于form-data與x-www-form-urlencoded的區(qū)別以及知識延伸,form-data和x-www-form-urlencoded都是HTTP請求中用于傳輸表單數據的編碼格式,需要的朋友可以參考下2023-11-11java網絡編程之socket網絡編程示例(服務器端/客戶端)
這篇文章主要介紹了java socket網絡編程的示例,分為服務器端和客戶端,大家參考使用吧2014-01-01Spring Cloud Gateway調用Feign異步問題記錄
這篇文章主要介紹了Spring Cloud Gateway調用Feign異步問題記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04java中PriorityBlockingQueue的入隊知識點總結
在本篇文章里小編給大家整理一篇關于java中PriorityBlockingQueue的入隊知識點總結內容,有需要的朋友們可以學習下。2021-01-01SpringBoot結合dev-tool實現(xiàn)IDEA項目熱部署的流程步驟
這篇文章主要給大家介紹了SpringBoot結合dev-tool實現(xiàn)IDEA項目熱部署的流程步驟,文章通過圖文介紹的非常詳細,對大家的學習有一定的幫助,需要的朋友可以參考下2023-10-10