您好,登錄后才能下訂單哦!
本篇內容介紹了“Java中抽象類和接口怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1.1.1 對抽象類的理解
1.1.2 關于抽象類
類與類之間具有共同特征,將這些共同特征提取出來,形成的就是抽象類;
類本身是不存在的,屬于抽象類無法創建對象【無法實例化】;
抽象類是用來被子類繼承的;
finial關鍵字和abstract關鍵字不能同時出現;
抽象類的子類可以是抽象類;
抽象類雖然無法實例化,但有構造方法,這個構造方法是供子類使用的;
接口一般描述的是行為動作信息
一個非抽象的類繼承抽象類,必須把抽象類中的抽象方法給實現(覆蓋、重寫)了
public class HelloWorld{ public static void main(String[] args){ //如何實現多態呢??? Animal a = new Bird();//向上轉型(自動類型轉換) //面對抽象對象編程,降低程序的耦合度,提供程序的擴展力,符合OCP原則 } } abstract class Animal{ public abstract void move(); } class Bird extends Animal{ public void move(){ }//Bird不是抽象類,必須實現父類的抽象方法 }//如果Bird是抽象類的話,那么繼承過來的抽象方法可以不去重寫、覆蓋、實現
抽象類也屬于引用數據類型;
[修飾符列表] abstract class 類名{
類體;
}
1)抽象方法表示沒有實現的方法,沒有方法體,以分號結尾的方法。例如:
public abstract void doSome();
2)抽象類中不一定有抽象方法,但抽象方法一定在抽象類當中;
3)沒有方法體的方法不一定都是抽象方法,Object類中就有很多方法都沒有方法體,以" ;"結尾 e.g.:public native int hashCode();這個方法底層調用了C++寫的動態鏈接庫程序;前面修飾符列表中有native,表示調用JVM本地程序
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)接口中的方法都是抽象方法,所以接口中的方法都沒有方法體;
[修飾符列表] interface 接口名{
}
1)類和類之間叫做繼承,類和接口之間叫做實現(可看作繼承),用關鍵字"implements";
2)當一個非抽象的類實現接口的話,必須將接口中所有的抽象方法全部實現(覆蓋、重寫);
public class interface { public static void main(String[] args) { //如何實現多態??? //父類型的引用指向子類型的對象 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; } }
注意:非抽象的類實現接口時重寫的抽象方法public不可省;
3)一個類可以實現多個接口,這種機制彌補了"java中類和類只支持單繼承"帶來的缺陷;
接口和接口之間在進行強制類型轉換的時候,沒有繼承關系,也可以強轉,但運行的時候可能會出現ClassCastException異常,需要加instanceof進行判斷;
public class HelloWorld{ public static void main(String[] args) { //如何實現多態??? A a = new C(); if(a instanceof B){ B b2 = (B)a;//此時a b的底層都是C,C實現了接口A和接口B,所以可以向下轉型 b2.m2(); } M m = new E(); if(m instanceof K){ K k = (K)m;//這里的E()和K沒有關系,E實現了M,但沒有實現接口K,所以不能向下轉型 k.m3(); } } } interface A{ void m1(); } interface B{ void m2(); } class C implements A,B{//C實現了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,但沒有實現K public void m3(){ } public void m4(){ }
4)繼承和實現都存在的話,代碼怎么寫?
extends關鍵字在前,implements關鍵字在后
public class interface{ public static void main(String args[]){ //創建對象 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中抽象類和接口怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。