发表于: 2017-09-08 22:49:08

1 726


今天完成的事情:

1. 学习多态的概念

   多态性是面向程序设计的重要部分,通常使用方法的重载(overloading)和重写(overriding)实现类多态性。方法的重载是指在一个类中有多个方法名相同,但是参数不同的方法。Java在执行具有重载方法时,根据调用参数的个数和类型区分具体执行的是哪个方法。

(1)实例如下:定义Calculate类,定义名称为getArea()方法和draw()方法。

public class Calculate {
final float PI=3.1415926f;
   //求圆的面积
   public float getArea(float r){
float area=PI*r*r;
       return area;
   }
//求矩形的面积
   public float getArea(float l,float w){
float area=l*w;
       return area;
   }
public static void main(String[] args){
Calculate calculate=new Calculate();
       float l=20;
       float w=30;
       float areaRectangle=calculate.getArea(l,w);
       System.out.println("求长为"+l+"宽为"+w+"的矩形的面积是:"+areaRectangle);
       float r=7;
       float areaCirc=calculate.getArea(r);
       System.out.println("求半径为"+r+"的圆的面积是:"+areaCirc);
   }
}

(2)范例:计算几何图形的面积

    【1】创建一个抽象类Shape,定义方法getName()和getArea()

public abstract class shape {
public String getName(){
       return this.getClass().getSimpleName();
   }
       public abstract double getArea();
}

    【2】创建Circle类,继承shape,实现抽象方法getArea()。

public class Circle extends shape{
private double radius;
   public Circle(double radius){
this.radius=radius;
   }
@Override
   public double  getArea(){
return Math.PI*Math.pow(radius,2);
   }
}

  【3】创建Rectangle类,实现抽象方法getArea()

public class Rectangle extends shape{
private double length;
   private double width;
   public Rectangle(double length,double width){
this.length=length;
       this.width=width;
   }
@Override
   public double getArea(){
return length*width;
   }
}

【4】创建测试类Test

public class Test {
public static void main(String[] args){
Circle circle=new Circle(1);
       System.out.println("图形的名称是:"+circle.getName());
       System.out.println("图形的面积是:"+circle.getArea());
       Rectangle rectangle=new Rectangle(1,1);
       System.out.println("图形的名称是:"+rectangle.getName());
       System.out.println("图形的面积是:"+rectangle.getArea());
   }
}

运行结果如下:

图形的名称是:Circle

图形的面积是:3.141592653589793

图形的名称是:Rectangle

图形的面积是:1.0


(3)范例:汽车销售问题

【1】创建抽象类Car,定义抽象方法getInfo()

public abstract class Car {
public abstract String getInfo();
}

【2】创建BMW类,继承Car,并实现getInfo()方法

public class BMW extends Car {
@Override
   public String getInfo(){
return "BWM";
   }
}

【3】创建Benz类,继承Car,并实现getInfo()方法

public class Benz extends Car {
@Override
   public String getInfo(){
return "Benz";
   }
}

【4】创建CarFactory类,定义静态方法getCar()

public class CarFactory {
public static Car getCar(String name){
if(name.equalsIgnoreCase("BMW")){
return new BMW();
       }else if(name.equalsIgnoreCase("Benz")){
return new Benz();
       }else{
return null;
       }
}
}

【5】创建类Customer

public class Customer {
public static void main(String[] args){
System.out.println("顾客要购买BMW");
       Car bmw=CarFactory.getCar("bmw");
       System.out.println("提取汽车:"+bmw.getInfo());
       System.out.println("顾客要购买Benz");
       Car benz=CarFactory.getCar("benz");
       System.out.println("提取汽车:"+benz.getInfo());
   }
}


顾客要购买BMW

提取汽车:BWM

顾客要购买Benz

提取汽车:Benz


    通过以上几个小案例,了解继承多态的含义,多态性的必要条件:1.要有继承2.要有重写

面向对象的三大特性封装、继承、多态,从某种角度可以说前两者都体现在多态这一特性上。所以多态也可以说是最重要的。

遇到的问题:

暂时无

明天的计划:

继续学习多态性,通过跟过的实例来加强理解同时提高逻辑思维能力,因为这部分的内容涉及多个class之间的相互关系。

收获:

0基础到这里感觉有点开始要动点脑子了,孰能生巧,尽快结束琐事全心投入Java!今天白天没时间看书,晚上7点开始看的,现学现卖的写了这个日志,还需要加快节奏同时对核心概念理解透彻,不可浑沦吞枣。


返回列表 返回列表
评论

    分享到