发表于: 2017-09-08 22:49:08
1 727
今天完成的事情:
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点开始看的,现学现卖的写了这个日志,还需要加快节奏同时对核心概念理解透彻,不可浑沦吞枣。
评论