av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

通過(guò)應(yīng)用實(shí)例討論Java多態(tài)的實(shí)現(xiàn)

實(shí)現(xiàn)Java多態(tài)

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、大東ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的大東網(wǎng)站制作公司

在代碼中實(shí)現(xiàn)Java的多態(tài)必須遵循的要求可歸納如下:

1.代碼中必須有超類(lèi)和子類(lèi)繼承關(guān)系。

2.超類(lèi)提供作為接口的方法,對(duì)子類(lèi)完善或者覆蓋這些方法指定規(guī)范。

3.參與多態(tài)的子類(lèi)必須完善或者覆蓋這些指定的方法,以達(dá)到接口效應(yīng)。

4.編寫(xiě)驅(qū)動(dòng)類(lèi),或者應(yīng)用代碼,子類(lèi)向上轉(zhuǎn)型為超類(lèi)引用,實(shí)現(xiàn)多態(tài)。

下面小節(jié)應(yīng)用實(shí)例分別討論如何實(shí)現(xiàn)多態(tài)。

超類(lèi)提供Java多態(tài)接口

以計(jì)算圓形物體表面積和體積為例,討論多態(tài)對(duì)超類(lèi)的要求以及如何提供多態(tài)接口:

 
 
 
  1. public abstract class Shape {  
  2.     ...  
  3.     // 以下定義抽象方法作為多態(tài)接口  
  4.     public abstract void computeArea();       
  5.     public abstract void computeVolume();         
  6.     public abstract double getArea();           //新增參與多態(tài)的接口方法  
  7.     public abstract double getVolume();   
  8.    

除原來(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)的超類(lèi)不必一定是抽象類(lèi)。但因?yàn)樵谶@個(gè)超類(lèi)中,甚至大多數(shù)應(yīng)用程序的超類(lèi)中,只提供執(zhí)行具體運(yùn)算的方法的簽名,不可能提供具體代碼。所以應(yīng)用抽象方法作為多態(tài)接口比較普遍。

如在計(jì)算公司雇員工資的超類(lèi)中:

 
 
 
  1. // 用抽象方法作為多態(tài)接口  
  2. public abstract class Employee {  
  3.     ...  
  4.     public abstract double earnings();    //定義抽象方法作為多態(tài)接口  

也可定義為普通方法,如:

 
 
 
  1. //這個(gè)方法將作為多態(tài)接口被子類(lèi)的方法所覆蓋  
  2.     public class Manager extends Employee {  
  3.     ...  
  4.     public double eamings () return 0.0; 

子類(lèi)完善接口

在計(jì)算圓形物體表面積和體積的例子中,CircleShape2繼承了Shape,Circle繼承了CircleShape2。Circle類(lèi)中完善了抽象超類(lèi)指定的、作為多態(tài)接口的抽象方法如下:

 
 
 
  1. public class Circle extends CircleShape2 {  
  2.     ...  
  3.     double volume = 0.0;                //Circle類(lèi)沒(méi)有體積  
  4.     public void computeArea() {         //完善超類(lèi)作為多態(tài)接口的抽象方法  
  5.         area = Math.PI * radius * radius;  
  6.     }  
  7.     public double getArea() {  
  8.         return area;  
  9.     }  
  10.     public void computeVolume() {}      //完善超類(lèi)作為多態(tài)接口的抽象方法  
  11.     public double getVolume() {  
  12.         return volume;  
  13.     }  
  14.    

代碼中完善了超類(lèi)Shape規(guī)定的四個(gè)作為多態(tài)接口的抽象方法,實(shí)際上,已存在的Circle程序已經(jīng)編寫(xiě)了其中的兩個(gè)方法,只需要完善computeVolume()和getVolume()即可。Circle類(lèi)沒(méi)有體積計(jì)算,所以ComputeVolume()為空程序體且getVolume()返回值為0.0。

以此類(lèi)推,Sphere繼承了Circle,覆蓋了Circle的computeArea()和computeVolume():

 
 
 
  1. public class Sphere extends Circle{  
  2.     ...  
  3.     public void computeArea() {     //覆蓋Circle的該方法  
  4.         super.computeArea();        //調(diào)用Circle的方法  
  5.         area = 4* area;  
  6.     }  
  7.     public void computeVolume() {   //覆蓋Circle的該方法  
  8.         super.computeArea();        //調(diào)用Circle的方法  
  9.         volume = 4.0/3 * radius * area;  
  10.     }  

并且繼承了getArea()和getVolume()。顯而易見(jiàn),抽象類(lèi)和覆蓋技術(shù)的應(yīng)用,已經(jīng)為實(shí)現(xiàn)多態(tài)鋪平了道路。這里,只是對(duì)抽象類(lèi)中指定的抽象方法,以及子類(lèi)完善這些方法,從多態(tài)接口的角度加以新的內(nèi)容和解釋。按照這個(gè)概念代碼技術(shù),編寫(xiě)計(jì)算員工工資的子類(lèi)也是水到渠成的事。如:

 
 
 
  1. //Demo code  
  2. public Manager extends Employee {  
  3.     ...  
  4.     public double earnings () {   
  5.         return baseSalary + meritPay + bonus;  
  6.     }  

值得一提的是,如果超類(lèi)中定義的作為多態(tài)接口的方法是一個(gè)完善了的普通方法,在子類(lèi)中則需覆蓋它,以便實(shí)現(xiàn)多態(tài)。

如何使用Java的多態(tài)

調(diào)用多態(tài)方法是通過(guò)向上轉(zhuǎn)型,或稱(chēng)超類(lèi)引用實(shí)現(xiàn)的。即向上轉(zhuǎn)型后,由超類(lèi)產(chǎn)生對(duì)子類(lèi)多態(tài)方法的動(dòng)態(tài)調(diào)用,如:

 
 
 
  1. Circle myCircle = new Circle(20.98);  
  2. Shape shape = myCircle;             //向上轉(zhuǎn)型或超類(lèi)引用  
  3. shape.computeArea();.               //多態(tài)調(diào)用  
  4. ... 

應(yīng)用鏈接表或集合,以及循環(huán),則可有效地對(duì)大量的對(duì)象方法實(shí)行多態(tài)調(diào)用。本書(shū)將在以后的章節(jié)專(zhuān)門(mén)討論循環(huán)、鏈接表和集合技術(shù)。

如下是對(duì)計(jì)算圓形物體的表面積和體積實(shí)現(xiàn)多態(tài)調(diào)用的代碼:

 
 
 
  1. public class CircleShapeApp{  
  2.     public static void main(String[] args) {  
  3.         Circle circle = new Circle(12.98);  
  4.         Sphere sphere = new Sphere(25.55);  
  5.    
  6.         Shape shape = circle;       //向上轉(zhuǎn)型  
  7.         //多態(tài)調(diào)用  
  8.         shape.computeArea();  
  9.         shape.computeVolume();  
  10.         System.out.println("circle area: " + shape.getArea());  
  11.         System.out.println("circle volume: " + shape.getVolume());  
  12.         //多態(tài)調(diào)用  
  13.         shape = sphere;  
  14.         shape.computeArea();  
  15.         shape.computeVolume();  
  16.         System.out.println("Sphere area: " + shape.getArea());  
  17.         System.out.println("Sphere volume: " + shape.getVolume());  
  18.     }  

這里對(duì)Circle對(duì)象多態(tài)調(diào)用computeVolume()毫無(wú)意義,僅是為了演示目的。其運(yùn)行結(jié)果為:

 
 
 
  1. circle area: 529.2967869138698  
  2. circle volume: 0.0  
  3. Sphere area: 2050.8395382450512  
  4. Sphere volume: 69865.26693621474 

如果需要多態(tài)調(diào)用大量對(duì)象,可以使用數(shù)組和循環(huán)如下:

 
 
 
  1. ...  
  2. for(int i = 0; i < objNum; i++) {           //循環(huán)objNum次  
  3.     shape[i].computeArea();                 //i從0到objNum-1  
  4.     shape[i].computeVolume();  
  5.     System.out.println("The area: " + shape[i].getArea());  
  6.     System.out.println("The volume: " + shape[i].getVolume());  

這個(gè)循環(huán)語(yǔ)句也被稱(chēng)為多態(tài)管理循環(huán)。

Java的多態(tài)就先介紹到這里。本文出自 “海外咖啡豆 - 高永強(qiáng)的博客天地” 博客。


分享標(biāo)題:通過(guò)應(yīng)用實(shí)例討論Java多態(tài)的實(shí)現(xiàn)
當(dāng)前鏈接:http://uogjgqi.cn/article/djphdgh.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流