本篇文章為大家展示了怎樣通過(guò)應(yīng)用實(shí)例討論Java多態(tài)的實(shí)現(xiàn),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到寶山網(wǎng)站設(shè)計(jì)與寶山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋寶山地區(qū)。
實(shí)現(xiàn)Java多態(tài)
在代碼中實(shí)現(xiàn)Java的多態(tài)必須遵循的要求可歸納如下:
1.代碼中必須有超類和子類繼承關(guān)系。
2.超類提供作為接口的方法,對(duì)子類完善或者覆蓋這些方法指定規(guī)范。
3.參與多態(tài)的子類必須完善或者覆蓋這些指定的方法,以達(dá)到接口效應(yīng)。
4.編寫驅(qū)動(dòng)類,或者應(yīng)用代碼,子類向上轉(zhuǎn)型為超類引用,實(shí)現(xiàn)多態(tài)。
下面小節(jié)應(yīng)用實(shí)例分別討論如何實(shí)現(xiàn)多態(tài)。
超類提供Java多態(tài)接口
以計(jì)算圓形物體表面積和體積為例,討論多態(tài)對(duì)超類的要求以及如何提供多態(tài)接口:
public abstract class Shape { ... // 以下定義抽象方法作為多態(tài)接口 public abstract void computeArea(); public abstract void computeVolume(); public abstract double getArea(); //新增參與多態(tài)的接口方法 public abstract double getVolume(); }
除原來(lái)存在的兩個(gè)抽象方法外,因?yàn)間etArea()和getVolume()也涉及和參與多態(tài)功能,因此將它們定義為實(shí)現(xiàn)多態(tài)的接口方法。另外多態(tài)的實(shí)現(xiàn)不影響任何其他運(yùn)算和操作,所以這個(gè)代碼的其他部分無(wú)需修改。
當(dāng)然執(zhí)行多態(tài)的超類不必一定是抽象類。但因?yàn)樵谶@個(gè)超類中,甚至大多數(shù)應(yīng)用程序的超類中,只提供執(zhí)行具體運(yùn)算的方法的簽名,不可能提供具體代碼。所以應(yīng)用抽象方法作為多態(tài)接口比較普遍。
如在計(jì)算公司雇員工資的超類中:
// 用抽象方法作為多態(tài)接口 public abstract class Employee { ... public abstract double earnings(); //定義抽象方法作為多態(tài)接口 }
也可定義為普通方法,如:
//這個(gè)方法將作為多態(tài)接口被子類的方法所覆蓋 public class Manager extends Employee { ... public double eamings () return 0.0;
子類完善接口
在計(jì)算圓形物體表面積和體積的例子中,CircleShape2繼承了Shape,Circle繼承了CircleShape2。Circle類中完善了抽象超類指定的、作為多態(tài)接口的抽象方法如下:
public class Circle extends CircleShape2 { ... double volume = 0.0; //Circle類沒(méi)有體積 public void computeArea() { //完善超類作為多態(tài)接口的抽象方法 area = Math.PI * radius * radius; } public double getArea() { return area; } public void computeVolume() {} //完善超類作為多態(tài)接口的抽象方法 public double getVolume() { return volume; } }
代碼中完善了超類Shape規(guī)定的四個(gè)作為多態(tài)接口的抽象方法,實(shí)際上,已存在的Circle程序已經(jīng)編寫了其中的兩個(gè)方法,只需要完善computeVolume()和getVolume()即可。Circle類沒(méi)有體積計(jì)算,所以ComputeVolume()為空程序體且getVolume()返回值為0.0。
以此類推,Sphere繼承了Circle,覆蓋了Circle的computeArea()和computeVolume():
public class Sphere extends Circle{ ... public void computeArea() { //覆蓋Circle的該方法 super.computeArea(); //調(diào)用Circle的方法 area = 4* area; } public void computeVolume() { //覆蓋Circle的該方法 super.computeArea(); //調(diào)用Circle的方法 volume = 4.0/3 * radius * area; } }
并且繼承了getArea()和getVolume()。顯而易見(jiàn),抽象類和覆蓋技術(shù)的應(yīng)用,已經(jīng)為實(shí)現(xiàn)多態(tài)鋪平了道路。這里,只是對(duì)抽象類中指定的抽象方法,以及子類完善這些方法,從多態(tài)接口的角度加以新的內(nèi)容和解釋。按照這個(gè)概念代碼技術(shù),編寫計(jì)算員工工資的子類也是水到渠成的事。如:
//Demo code public Manager extends Employee { ... public double earnings () { return baseSalary + meritPay + bonus; }
值得一提的是,如果超類中定義的作為多態(tài)接口的方法是一個(gè)完善了的普通方法,在子類中則需覆蓋它,以便實(shí)現(xiàn)多態(tài)。
如何使用Java的多態(tài)
調(diào)用多態(tài)方法是通過(guò)向上轉(zhuǎn)型,或稱超類引用實(shí)現(xiàn)的。即向上轉(zhuǎn)型后,由超類產(chǎn)生對(duì)子類多態(tài)方法的動(dòng)態(tài)調(diào)用,如:
Circle myCircle = new Circle(20.98); Shape shape = myCircle; //向上轉(zhuǎn)型或超類引用 shape.computeArea();. //多態(tài)調(diào)用 ...
應(yīng)用鏈接表或集合,以及循環(huán),則可有效地對(duì)大量的對(duì)象方法實(shí)行多態(tài)調(diào)用。本書將在以后的章節(jié)專門討論循環(huán)、鏈接表和集合技術(shù)。
如下是對(duì)計(jì)算圓形物體的表面積和體積實(shí)現(xiàn)多態(tài)調(diào)用的代碼:
public class CircleShapeApp{ public static void main(String[] args) { Circle circle = new Circle(12.98); Sphere sphere = new Sphere(25.55); Shape shape = circle; //向上轉(zhuǎn)型 //多態(tài)調(diào)用 shape.computeArea(); shape.computeVolume(); System.out.println("circle area: " + shape.getArea()); System.out.println("circle volume: " + shape.getVolume()); //多態(tài)調(diào)用 shape = sphere; shape.computeArea(); shape.computeVolume(); System.out.println("Sphere area: " + shape.getArea()); System.out.println("Sphere volume: " + shape.getVolume()); } }
這里對(duì)Circle對(duì)象多態(tài)調(diào)用computeVolume()毫無(wú)意義,僅是為了演示目的。其運(yùn)行結(jié)果為:
circle area: 529.2967869138698 circle volume: 0.0 Sphere area: 2050.8395382450512 Sphere volume: 69865.26693621474
如果需要多態(tài)調(diào)用大量對(duì)象,可以使用數(shù)組和循環(huán)如下:
... for(int i = 0; i < objNum; i++) { //循環(huán)objNum次 shape[i].computeArea(); //i從0到objNum-1 shape[i].computeVolume(); System.out.println("The area: " + shape[i].getArea()); System.out.println("The volume: " + shape[i].getVolume()); }
這個(gè)循環(huán)語(yǔ)句也被稱為多態(tài)管理循環(huán)。
上述內(nèi)容就是怎樣通過(guò)應(yīng)用實(shí)例討論Java多態(tài)的實(shí)現(xiàn),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。