深刻解析Java編程中的籠統類。本站提示廣大學習愛好者:(深刻解析Java編程中的籠統類)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析Java編程中的籠統類正文
Java法式用籠統類(abstract class)來完成天然界的籠統概念。籠統類的感化在於將很多有關的類組織在一路,供給一個公共的類,即籠統類,而那些被它組織在一路的詳細的類將作為它的子類由它派生出來。籠統類描繪了私有行動的特點,並經由過程繼續機制傳送給它的派生類。在籠統類中界說的辦法稱為籠統辦法,這些辦法只要辦法頭的聲明,而用一個分號來取代辦法體的界說,即只界說成員辦法的接口情勢,而沒有詳細操作。只要派生類對籠統成員辦法的重界說才真正完成與該派生類相干的操作。
在各子類繼續了父類的籠統辦法以後,再分離用分歧的語句和辦法體來從新界說它,構成若干個名字雷同,前往值雷同,參數列表也雷同,目標分歧然則詳細完成有必定差異的辦法。籠統類中界說籠統辦法的目標是完成一個接口,即一切的子類對外都出現一個雷同名字的辦法。籠統類是它的一切子類的公共屬性的聚集,是包括一個或多個籠統辦法的類。應用籠統類的一年夜長處就是可以充足應用這些公共屬性來進步開辟和保護法式的效力。關於籠統類與籠統辦法的限制以下:
(1)但凡用abstract 潤飾符潤飾的類被稱為籠統類。但凡用abstract潤飾符潤飾的成員辦法被稱為籠統辦法。
(2)籠統類中可以有零個或多個籠統辦法,也能夠包括非籠統的辦法。
(3)籠統類中可以沒有籠統辦法,然則,有籠統辦法的類必需是籠統類。
(4)關於籠統辦法來講,在籠統類中只指定其辦法名及其類型,而不書寫其完成代碼。
(5)籠統類可以派生子類,在籠統類派生的子類中必需完成籠統類中界說的一切籠統辦法。
(6)籠統類不克不及創立對象,創立對象的任務由籠統類派生的子類來完成。
(7)假如父類中已有同名的abstract辦法,則子類中就不克不及再有同名的籠統辦法。
(8)abstract不克不及與final並列潤飾統一個類。
(9)abstract 不克不及與private、static、final或native並列潤飾統一個辦法。
Java說話劃定,當一個類外面有籠統辦法的時刻,這個類必需被聲明為籠統類。
子類繼續父類時,假如這個父類外面有籠統辦法,而且子類認為可以去完成父類的一切籠統辦法,那末子類必需去完成父類的一切籠統辦法,如:
/** * 子類Dog繼續籠統類Animal,而且完成了籠統辦法enjoy * @author gacl * */ class Dog extends Animal { /** * Dog類添加本身獨有的屬性 */ public String furColor; public Dog(String n, String c) { super(n);//挪用父類Animal的結構辦法 this.furColor = c; } @Override public void enjoy() { System.out.println("狗叫...."); } }
這個父類外面的籠統辦法,子類假如認為完成不了,那末把就子類也聲明成一個籠統類,如:
/** * 這裡的子類Cat從籠統類Animal繼續上去,天然也繼續了Animal類外面聲明的籠統辦法enjoy(), * 但子類Cat認為本身去完成這個enjoy()辦法也不適合,是以它把它本身也聲明成一個籠統的類, * 那末,誰去完成這個籠統的enjoy辦法,誰繼續了子類,那誰就去完成這個籠統辦法enjoy()。 * @author gacl * */ abstract class Cat extends Animal { /** * Cat添加本身獨有的屬性 */ public String eyeColor; public Cat(String n, String c) { super(n);//挪用父類Animal的結構辦法 this.eyeColor = c; } }
這裡的子類Cat從籠統類Animal繼續上去,天然也繼續了Animal類外面聲明的籠統辦法enjoy(),但子類Cat認為本身去完成這個enjoy()辦法也不適合,是以它把它本身也聲明成一個籠統的類,那末,誰去完成這個籠統的enjoy辦法,誰繼續了子類,那誰就去完成這個籠統辦法enjoy()。如:
/** * 子類BlueCat繼續籠統類Cat,而且完成了從父類Cat繼續上去的籠統辦法enjoy * @author gacl * */ class BlueCat extends Cat { public BlueCat(String n, String c) { super(n, c); } /** * 完成了籠統辦法enjoy */ @Override public void enjoy() { System.out.println("藍貓叫..."); } }
完全的測試代碼以下:
package javastudy.summary; /** * 父類Animal * 在class的後面加上abstract,即聲明成如許:abstract class Animal * 如許Animal類就成了一個籠統類了 */ abstract class Animal { public String name; public Animal(String name) { this.name = name; } /** * 籠統辦法 * 這裡只要辦法的界說,沒無方法的完成。 */ public abstract void enjoy(); } /** * 這裡的子類Cat從籠統類Animal繼續上去,天然也繼續了Animal類外面聲明的籠統辦法enjoy(), * 但子類Cat認為本身去完成這個enjoy()辦法也不適合,是以它把它本身也聲明成一個籠統的類, * 那末,誰去完成這個籠統的enjoy辦法,誰繼續了子類,那誰就去完成這個籠統辦法enjoy()。 * @author gacl * */ abstract class Cat extends Animal { /** * Cat添加本身獨有的屬性 */ public String eyeColor; public Cat(String n, String c) { super(n);//挪用父類Animal的結構辦法 this.eyeColor = c; } } /** * 子類BlueCat繼續籠統類Cat,而且完成了從父類Cat繼續上去的籠統辦法enjoy * @author gacl * */ class BlueCat extends Cat { public BlueCat(String n, String c) { super(n, c); } /** * 完成了籠統辦法enjoy */ @Override public void enjoy() { System.out.println("藍貓叫..."); } } /** * 子類Dog繼續籠統類Animal,而且完成了籠統辦法enjoy * @author gacl * */ class Dog extends Animal { /** * Dog類添加本身獨有的屬性 */ public String furColor; public Dog(String n, String c) { super(n);//挪用父類Animal的結構辦法 this.furColor = c; } @Override public void enjoy() { System.out.println("狗叫...."); } } public class TestAbstract { /** * @param args */ public static void main(String[] args) { /** * 把Cat類聲明成一個籠統類今後,就不克不及再對Cat類停止實例化了, * 由於籠統類是殘破不全的,缺胳膊少腿的,是以籠統類不克不及被實例化。 */ //Cat c = new Cat("Catname","blue"); Dog d = new Dog("dogname","black"); d.enjoy();//挪用本身完成了的enjoy辦法 BlueCat c = new BlueCat("BlueCatname","blue"); c.enjoy();//挪用本身完成了的enjoy辦法 } }