美文网首页
第六章面向对象 第三篇

第六章面向对象 第三篇

作者: 黄敬理 | 来源:发表于2018-11-26 20:12 被阅读0次

-什么是多态

-1.即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

-2.指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)

-多态存在的三个必要条件

一、要有继承;

二、要有重写;

三、父类引用指向子类对象。

-经典案例

-形状类(父类)

**

  • 父类Shape,抽象类
    */
    public abstract class Shape {
    //声明两个受保护类型的属性x,y
    protected double x;
    protected double y;
    //无参构造器
    public Shape(){
    }
    //全参构造器,只做声明,具体属性初始化到子类中
    public Shape(double x,double y){
    }
    //声明一个抽象方法,抽象方法不能带方法体
    public abstract double getArea();
    }

-三角形类(子类)

/**

  • 三角形子类,继承Shape,实现方式同Rectangle
    */

public class Triangle extends Shape{
public Triangle(){
super();
}

public Triangle(double x, double y){
    super.x=x;
    super.y=y;

}
@Override
public double getArea(){
    return this.x*this.y*0.5;

}

}

-矩形类(子类)

/**

  • 矩形子类,继承Shape,java是单一继承,只能有一个父类
    */
    public class Rectangle extends Shape {
    public Rectangle(){
    super();
    }
    public Rectangle(double x,double y){
    //在构造方法中给父类属性x和y初始化,通过super.x和super.y访问父类属性
    super.x=x;
    super.y=y;

    }
    //重写父类中的抽象方法getArea(),求出具体形状的面积
    @Override
    public double getArea(){
    //this.x和this.y是访问当前对象的x和y属性, 此处用super.xsuper.y
    return this.x
    this.y;
    }
    }

-立方体子类

/**

  • 立方体子类,继承Rectangle类,为最终类,不再被继承
    */

public class Cube extends Rectangle {
//声明一个私有属性,为立方体的高
private double height;
public Cube(){
}
public Cube(double x,double y,double height){
//调用父类构造方法,完成对底面矩形的长,宽的初始化
super(x,y);
//通过this关键字,完成当前立方体对象的高的初始化
this.height=height;
}
//本类独有的成员方法,求体积
public double getVolum(){
//调用父类的求面积方法,求出底面矩形面积,使用this.height访问当前立方体的高,最终求出立方体的体积
return super.getArea()*this.height;
}

}

-测试类

/**

  • 主程序,用来测试各种子类及方法
    */

public class Test {
public static void main(String[] args) {
//通过上转型对象创建一个三角形的对象
Shape shape = new Triangle(4.0,3.0);
System.out.println("三角形面积是:"+shape.getArea());
//t通过上转型对象创建一个矩形的对象
Shape shape1 = new Rectangle(4.0,3.0);
System.out.println("矩形面积是:"+shape1.getArea());
//通过最终类创建一个立方体对象
Cube cube = new Cube(4.0,3.0,2.0);
System.out.println("立方体体积是:"+cube.getVolum());
}
}

-运行结果图

image.png

相关文章

  • 【Java】基础篇之类与对象、封装、构造方法-006

    第六章 类与对象、封装、构造方法 6.1 面向对象思想 6.1.1 面向对象思想概述 1.概述 Java语言是一...

  • 第六章面向对象 第三篇

    -什么是多态 -1.即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性...

  • 面向对象第三篇

    一、抽象类 实例: 描述:定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。Rec...

  • 面向对象第三篇

    一:抽象类实例描述:定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。Rectan...

  • 面向对象第三篇

    1.抽象类 1.1实例 描述:定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。R...

  • javascript高级程序设计(第6章)-- 面向对象的程序设

    第六章:面向对象的程序设计 本章内容: 理解对象属性 理解并创建对象 理解继承 ECMA-262把对象定义为:"无...

  • JavaScript高级程序设计(第3版) 笔记

    第六章 面向对象的程序设计 6.1 理解对象 6.1.1 属性类型 ECMAScript 中有两种属性: 数据属性...

  • 第三篇-面向对象(上)

    1.面向对象三大特征: 封装、继承、多态 2.构造器为什么无返回值类型,但不可定义为void: 构造器相当于是有默...

  • 面向对象设计第三篇

    1抽象类注意点: 1.super的关键字的三个作用 访问父类属性 (继承父类所拥有的) 调用父类构造方法 (...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

网友评论

      本文标题:第六章面向对象 第三篇

      本文链接:https://www.haomeiwen.com/subject/sljiqqtx.html