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

第六章面向对象 第三篇

作者: 黄敬理 | 来源:发表于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

    相关文章

      网友评论

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

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