zoukankan      html  css  js  c++  java
  • 定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在main方法中构造3个对象,调用showArea方法。(体现多态)

    实现多态的三个条件:1.要有继承2.要有抽象方法重写3.用父类指针(引用)指向子类对象

    重载重写重定义的区别:

    1.重载:在同一个类中进行;  编译时根据参数类型和个数决定方法调用;  子类无法重载父类;

      父类同名方法被子类该方法覆盖.

    2.重写:在父类和子类之间进行;  父类与子类方法有完全相同类型;

      在运行时根据具体对象类型决定方法调用;

    3.在重写中有抽象方法的会产生多态;没有使用抽象方法叫重定义

    以下具体代码具体分析:

    package test3;
    abstract class Shape{      //抽象类(一定有抽象方法,但不一定都是抽象方法)
    protected double area;
    abstract void showArea();    //抽象方法
    }
    class Rectangle extends Shape{ //类的继承
    private double x,y;
    Rectangle(){}
    Rectangle(double x,double y){  //有参构造方法初始化
    this.x=x;
    this.y=y;
    }
    public double getX(){
    return x;
    }
    public double getY(){
    return y;
    }
    public void showArea(){      //计算面积并显示.showArea方法的重写
    area=getX()*getY();
    System.out.println(area);
    }
    }
    class Square extends Shape{    //同上
    private double x;
    Square(){}
    Square(double x){
    this.x=x;
    }
    public double getX(){
    return x;
    }
    public void showArea(){
    area=getX()*getX();
    System.out.println(area);
    }
    }
    class Circle extends Shape{    //同上
    private double r;
    Circle(){}
    Circle(double r){
    this.r=r;
    }
    public double getR(){
    return r;
    }
    public void showArea(){
    area=3.14*getR()*getR();
    System.out.println(area);
    }
    }
    public class Test3_2 {
    public static void main(String args[]){
    Shape re=new Rectangle(2,3);    //多态产生的第3个条件.父类的引用指向子类的对象
    fun(re);              //抽象方法重写产生多态,运行时根据具体对象类型决定方法调用
    Shape sq=new Square(2);
    fun(sq);
    Shape ci=new Circle(2);
    fun(ci);
    }
    public static void fun(Shape p){    
    p.showArea();
    }
    }

  • 相关阅读:
    二分查找
    「数学」二次函数中项系数大小与图像的关系
    「数学」夹角公式
    「CF80A」Panoramix's Prediction
    「Luogu P6101」[EER2]出言不逊
    「数学」三角函数公式以及部分证明
    「Luogu P6069」[MdOI2020] Group
    「CF80B」Depression
    「数学」Menelaus定理与Ceva定理
    「AT1175」ニコニコ文字列
  • 原文地址:https://www.cnblogs.com/silenTJ/p/7786668.html
Copyright © 2011-2022 走看看