java编程图形抽象类设计

问题描述
定义一个图形抽象类Shape,从抽象层面描述通用的图形操作,包括计算并返回当前图形的面积和周长两项(定义为抽象方法)。然后定义其子类Rectangle、Triangle、Circle分别描述矩形、三角形、圆形等三种不同形状,并添加必要的属性和方法、分别重写其从父类中继承的面积及周长计算方法。最后编写Java应用程序测试前述定义的图形类及其相关功能。
说明与提示
已知三条边长的情况下,可使用海伦公式计算三角形面积:
   

其中:a、b、c为三角形的三条边长;p为三角形的半周长,即p=(a+b+c)/2;S为三角形的面积。

算数开平方运算可调用JDK系统类Math的静态方法sqrt,其中还定义了圆周率常量PI,详情请自行查阅JDK API文档。

package javastudent423;
abstract class Shape_basic{
    public abstract void perimeter();//周长
    public abstract void area();//面积
}
class Circle_basic extends Shape_basic{
    public double r;
    @Override
    public void perimeter() {
        System.out.println("圆形的周长为:"+4*3.14*r);
    }
    @Override
    public void area() {
        System.out.println("圆形的面积为:"+r*3.14*r);
    }
}
class Triangle_basic extends Shape_basic{
    public double length1,length2,length3,length;
    @Override
    public void perimeter() {
        length = length1+length2+length3;
        System.out.println("三角形的周长为:"+length);
    }
    @Override
    public void area() {
    double d = (length1+length2+length3)/2;
    System.out.println("三角形的面积为:"+Math.sqrt(d*(d-length1)*(d-length2)*(d-length3)));
    }
}
 class Rect_basic extends Shape_basic{
    public double r_long,r_wider;
    @Override
    public void perimeter() {
        System.out.println("矩形的周长为:"+2*(r_long+r_wider));
    }
    @Override
    public void area() {
        System.out.println("矩形的面积为:"+r_long*r_wider);
    }    
}
public class Shape{
    public static void main(String[] arge) {
        Circle_basic c1 = new Circle_basic();
        c1.r = 3;
        System.out.println("圆形的半径为:"+c1.r);
        c1.area();
        c1.perimeter();
        Triangle_basic t1 = new Triangle_basic();
        t1.length1 = 3;
        t1.length2 = 4;
        t1.length3 = 5;
        System.out.println("三角形的三边长分别为:"+t1.length1+","+t1.length2+","+t1.length3);
        t1.area();
        t1.perimeter();
        Rect_basic r1 = new Rect_basic();
        r1.r_long = 4;
        r1.r_wider = 3;
        System.out.println("矩形的长宽分别为:"+r1.r_long+","+r1.r_wider);
        r1.area();
        r1.perimeter();
    }
}

该题主要考察JAVA的继承与多态,给你写了个例子参考:

import java.util.HashMap;

public class 继承测试 {
    /*
    在该类中定义两个方法,一个是 getName,用于使用反射机制获得类名称;另一个是抽象方法 getArea ,用来计算图形的面积。
    (2)创建圆形类 Circle ,继承自 Shape ,并实现抽象方法getArea。
    在 Circle 类的构造方法中获得了圆形的半径,用于在getArea计算圆形的面积。
    (3)创建矩形类 Rectangle ,继承自 Shape ,
    并实现抽象方法 getArea 。在 Rectangle 类的构造方法中获得了矩形的长和宽,用于在 getArea计算矩形的面积。
    
    */
    public static void main(String[] args) {
        Shape circle= new Circle(10);
        System.out.println("类名称是:"+circle.getName());
        System.out.println("圆的面积="+circle.getArea());
        Shape rect = new Rectangle(10,20);
        System.out.println("类名称是:"+rect.getName());
        System.out.println("矩形的面积="+rect.getArea());
    
    }
}
abstract class Shape{
    String getName() {
        return this.getClass().getName();
    }
    abstract float getArea();
}
class Circle extends Shape{

    float r;
    public Circle() {};
    public Circle(float r) {
        this.r = r;
    }
    
    @Override
    float getArea() {
        
        return 3.14f*r*r;
    }
    
}
class Rectangle extends Shape{

    float width;
    float height;
    public Rectangle() {}
    public Rectangle(float width,float height) {
        this.width = width;
        this.height = height;
    }
    @Override
    float getArea() {
        
        return width*height;
    }
    
}