Java抽象类的一个经典例子

这里单纯只给出了一个例子,对于抽象类的解释,烦请客官移步这里
一篇文章带你深入理解和掌握Java抽象类和抽象方法的使用

题目描述

【三角形类】
设计一个扩展自抽象类GeometriObject的新的Triangle类。绘制Triangle类和GeometricObject类的UML图并实现Triangle类。编写一个测试程序,提示用户输入三角形的三条边、一种颜色以及一个表明该三角形是否填充的布尔值。程序应该根据用户的输入,使用这些边以及颜色和是否填充的信息,创建一个Triangle对象。程序应该显示面积、周长、颜色以及真或者假来表明是否被填充。

UML图

在这里插入图片描述

抽象类GeometricObject的实现

//抽象类GeometricObject
 abstract class GeometricObject {
    
    
    private String color = "white";
    private boolean filled;
    private java.util.Date dateCreated;

    //无参构造函数
    protected GeometricObject(){
    
    
        dateCreated = new java.util.Date();
    }

    protected GeometricObject(String color, boolean filled){
    
    
        dateCreated = new java.util.Date();
        this.color = color;
        this.filled = filled;
    }

    public String getColor(){
    
    
        return color;
    }

    public void setColor(String color){
    
    
        this.color = color;
    }

    public boolean isFilled(){
    
    
        return filled;
    }

    public void setFilled(boolean filled){
    
    
        this.filled = filled;
    }

    public java.util.Date getDateCreated(){
    
    
        return dateCreated;
    }

    @Override
    public String toString(){
    
    
        return "created on " + dateCreated + "\ncolor: " + color +
                " and filled: " + filled+" ";
    }

    //两个抽象方法
    public abstract double getArea();
    public abstract double getPerimeter();
}//GeometricObject类结束

抽象类的子类Triangle的实现

class Triangle extends GeometricObject{
    
    
    private double side1;
    private double side2;
    private double side3;

    //三个构造函数
    public Triangle(double side1, double side2, double side3) {
    
    
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    public Triangle(String color, boolean filled, double side1, double side2, double side3) {
    
    
        super(color, filled);
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    public Triangle() {
    
    
    }

    //一定要重写实现抽象父类中的抽象方法
    @Override
    public double getArea() {
    
    
        double s = (side1 + side2 + side3)/2;
        return Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
    }

    @Override
    public double getPerimeter() {
    
    

        return side1+side2+side3;
    }

    @Override
    public String toString() {
    
    
        return "Triangle{" +
                super.toString()+
                ",side1=" + side1 +
                ", side2=" + side2 +
                ", side3=" + side3 +
                ",Area = " + getArea()+
                ",Perimeter =  " + getPerimeter()+
                '}';
    }
}

主函数

 public static void main(String[] args) {
    
    
        System.out.println("请分别输入三角形的颜色,是否填充的布尔值,三条边的大小:");
        Scanner input = new Scanner(System.in);
        String color = input.next();
        boolean isFilled = input.nextBoolean();
        boolean flag = true;
        double side1 = 0,side2 = 0,side3 = 0;
        while (flag)
        {
    
    
             side1 = input.nextDouble();
             side2 = input.nextDouble();
             side3 = input.nextDouble();
            if(side1+side2 > side3 && side1+side3 > side2 && side2+side3>side1)
                break;
            else
                System.out.println("您输入的三边不能构成三角形!请重新输入三条边的大小:");
        }
        Triangle triangle = new Triangle(color,isFilled,side1,side2,side3);

        System.out.println("下面输出该三角形的信息:");
        System.out.println(triangle.toString());
    }
}

测试结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45768060/article/details/106684759