No2_3.接口繼承多態_Java學習筆記_多態


***多態***
1.多態性:一般使用方法的重載(Overloading)和重寫(Overriding)實現類的多態;
2.重寫之因此具備多態性,是由於父類的方法在子類中被重寫,方法名相同,實現功能不一樣。
3.方法重載:是指在一個類中出現多個方法名相同,但參數或參數類型不一樣的方法;
4.java執行重載方法時,根據參數個數和類型區執行哪個方法;
5.重載的方法以前不必定必須有聯繫,但爲了提升程序的可讀性,通常只重載功能類似的方法;
6.方法重載時,方法返回值類型不能做爲區分方法的標誌;
java

多態:ide

  1 /**
  2  * 
  3  * @author 做者:sunshine
  4  * @date 建立時間:2016年7月4日 下午5:22:19
  5  */
  6 
  7 class Calculate{
  8     final float PI=3.14f;
  9     //求圓形的面積
 10     public float getArea(float r){
 11         float area=PI*r*r;
 12         return area;
 13     }
 14     //求矩形的面積
 15     public float getArea(float w,float l){
 16         float area=w*l;
 17         return area;
 18     }
 19     //畫任意形狀的圖形
 20     public void draw(int n){
 21         System.out.println("畫"+n+"個任意形狀的圖形。");
 22     }
 23     public void draw(String shape){
 24         System.out.println("畫一個"+shape+"形狀的圖形。");
 25     }
 26 }
 27 
 28 /**********
 29  *一、抽象類聲明時要使用abstract關鍵字來定義,爲繼承而存在;抽象類不能建立對象;
 30  *二、抽象類裏的抽象方法不能有方法體, 只能是方法的聲明,例如 abstract void AMethod()。
 31  *三、若是一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。
 32  *四、若是子類沒有實現父類的抽象方法,則必須將子類也定義爲abstract類。
 33  */
 34 abstract class Shape{
 35     public String getName(){
 36         return this.getClass().getSimpleName();        //不懂這兒,書上解釋:使用反射機制得到"類"名稱
 37     }
 38     public abstract double getArea();        //得到圖形的名稱
 39 } 
 40 
 41 class Circle extends Shape{
 42     private double radius;
 43     public Circle(double radius){
 44             this.radius=radius;
 45     }
 46 
 47     @Override
 48     public double getArea(){
 49         return Math.PI*Math.pow(radius, 2);
 50     }    
 51 }
 52 class Rectangle extends Shape{
 53     private double length;
 54     private double width;
 55     public Rectangle(double length,double width){
 56         this.length=length;
 57         this.width=width;        
 58     }
 59 
 60     @Override
 61     public double getArea(){
 62         return length*width;
 63     }    
 64 }
 65 
 66 //簡單的汽車銷售商場
 67 abstract class Car{
 68     public abstract String getInfo();
 69 }
 70 class BMW extends Car{
 71     @Override
 72     public String getInfo(){
 73         return "It's a BMW!";
 74     }
 75 }
 76 class Benz extends Car{
 77     @Override
 78     public String getInfo(){
 79         return "It's a Benz!";
 80     }
 81 }
 82 //建立一個CarFactory類,定義一個靜態方法getCar(),能夠根據用戶指定的車型來建立類
 83 class CarFactory {
 84     public static Car getCar(String name){
 85         if (name.equalsIgnoreCase("BMW")){
 86             return new BMW();
 87         } else if (name.equalsIgnoreCase("Benz")){
 88             return new Benz();
 89         }else {
 90             return null;
 91         }
 92     }
 93 }
 94 
 95 
 96 
 97 public class Hello3Polymorphism {
 98 
 99     public static void main(String[] args) {
100         // TODO Auto-generated method stub
101         System.out.println("開始學習多態嘍~~");
102         
103         //多態:方法重載 ,同一個類多個同名方法
104         System.out.println("\n方法重載 ,同一個類多個同名方法:");
105         Calculate cal=new Calculate();
106         float r=5.20f;
107         float w=8,l=4;
108         float areaR=cal.getArea(w, l);    //精度不夠準喲
109         float areaC=cal.getArea(r);
110         System.out.println("半徑爲"+r+"的圓的面積是:"+areaC);
111         System.out.println("長爲"+l+"寬爲"+w+"的長方形的面積是"+areaR);
112         
113         int n=5;
114         String star="星星";
115         cal.draw(n);
116         cal.draw(star);
117         
118         //計算幾何圖形的面積
119         System.out.println("\n計算幾何圖形的面積:");
120         Circle circle=new Circle(1);
121         //System.out.println("圖形的名稱是:"+circle.getArea());
122         System.out.println("圖形的面積是:"+circle.getName());
123         Rectangle rectangle=new Rectangle(3,5);
124         //System.out.println("圖形的名稱是:"+rectangle.getArea());
125         System.out.println("圖形的面積是:"+rectangle.getName());
126         
127         
128         //簡單的汽車銷售商場
129         System.out.println("\n簡單的汽車銷售商場");
130         System.out.println("顧客要購買BMW:");
131         Car bwm=CarFactory.getCar("BMW");
132         System.out.println("提取汽車:"+bwm.getInfo());
133         System.out.println("顧客要購買Benz:");
134         Car benz=CarFactory.getCar("Benz");
135         System.out.println("提取汽車:"+benz.getInfo());
136         
137         
138         
139     }
140 
141 }

輸出結果:學習

 1 開始學習多態嘍~~
 2 
 3 方法重載 ,同一個類多個同名方法:
 4 半徑爲5.2的圓的面積是:84.905594
 5 長爲4.0寬爲8.0的長方形的面積是32.0
 6 畫5個任意形狀的圖形。
 7 畫一個星星形狀的圖形。
 8 
 9 計算幾何圖形的面積:
10 圖形的面積是:Circle
11 圖形的面積是:Rectangle
12 
13 簡單的汽車銷售商場
14 顧客要購買BMW:
15 提取汽車:It's a BMW!
16 顧客要購買Benz:
17 提取汽車:It's a Benz!
相關文章
相關標籤/搜索