No2_3.接口继承多态_Java学习笔记_多态


***多态***
1.多态性:通常使用方法的重载(Overloading)和重写(Overriding)实现类的多态;
2.重写之所以具有多态性,是因为父类的方法在子类中被重写,方法名相同,实现功能不同。
3.方法重载:是指在一个类中出现多个方法名相同,但参数或参数类型不同的方法;
4.java执行重载方法时,根据参数个数和类型区执行哪一个方法;
5.重载的方法之前不一定必须有联系,但为了提高程序的可读性,一般只重载功能相似的方法;
6.方法重载时,方法返回值类型不能作为区分方法的标志;

多态:

  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  *1、抽象类声明时要使用abstract关键字来定义,为继承而存在;抽象类不能创建对象;
 30  *2、抽象类里的抽象方法不能有方法体, 只能是方法的声明,例如 abstract void AMethod()。
 31  *3、如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。
 32  *4、如果子类没有实现父类的抽象方法,则必须将子类也定义为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!

 

posted @ 2016-07-04 23:35  sunshine-habit  阅读(218)  评论(0编辑  收藏  举报