(1)设计一个名为Geometric的几何图形的抽象类,该类包括:

①两个名为color、filled属性分别表示图形颜色和是否填充。

②一个无参的构造方法。

③一个能创建指定颜色和填充值的构造方法。

④一个名为getArea()的抽象方法,返回图形的面积。

⑤一个名为getPerimeter()的抽象方法,返回图形的周长。

⑥一个名为toString()的方法,返回圆的字符串描述。

代码:

package com.sdbi.liyan;
abstract class Geometric {
    String color;//表示图形颜色
    boolean filled;//表示图形是否填充
    //定义一个无参的构造方法
    public Geometric() {
    }//创建一个能指定颜色和填充值的构造方法。
    public Geometric(String color,boolean filled) {
        this.color=color;
        this.filled=filled;
    }
    abstract double getArea();//一个名为getArea()的抽象方法,返回图形的面积。
    abstract double getPerimeter();//一个名为getPerimeter()的抽象方法,返回图形的周长。
    //一个名为toString()的方法,返回圆的字符串描述。
    @Override
    public String toString() {
        return "Geometric [color=" + color + ", filled=" + filled + ", getArea()=" + getArea() + ", getPerimeter()="
                + getPerimeter() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()="
                + super.toString() + "]";
    }
    
}

(2)设计一个名为Circle的圆类来实现Geometric类,该类包括:

①一个名为radius的double属性表示半径。

②一个无参构造方法创建圆。

③一个能创建指定radius的圆的构造方法。

④radius的访问器方法。

⑤一个名为getArea()的方法,返回该圆的面积。

⑥一个名为getPerimeter()的方法,返回圆的周长。

⑦一个名为toString()的方法,返回该圆的字符串描述。

代码:

package com.sdbi.liyan;

import java.util.Scanner;
public class Circle extends Geometric{
    double radius;//表示半径
    //一个无参构造方法创建圆
    public Circle() {
    }//一个能创建指定radius的圆的构造方法。
    public Circle(double radius) {
        this.radius=radius;
    }//radius的访问器方法
    public double getRadius() {
        return radius;
    }
    @Override
    //一个名为getArea()的方法,返回该圆的面积。
    double getArea() {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个半径,求圆的面积");
        final double PI=3.14D;
        double r=sc.nextDouble();
        double S=PI*r*r;
        System.out.println("半径为"+r+"的圆的面积为:"+S);
        return S;
    }
//一个名为getPerimeter()的方法,返回圆的周长。
    @Override
    double getPerimeter() {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个半径,求圆的周长");
        final double PI=3.14D;
        double r=sc.nextDouble();
        double C=PI*r*2;
        System.out.println("半径为"+r+"的圆的周长为:"+C);
        return C;
    }//一个名为toString()的方法,返回该圆的字符串描述。
    @Override
    public String toString() {
        return "Circle [radius=" + radius + ", color=" + color + ", filled=" + filled + ", getRadius()=" + getRadius()
                + ", getArea()=" + getArea() + ", getPerimeter()=" + getPerimeter() + ", toString()=" + super.toString()
                + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + "]";
    }
    
}

(3)设计一个名为Rectangle的矩形类来实现Geometric类,该类包括:

①两个名为side1、side2的double属性表示矩形的两条边。

②一个无参构造方法创建矩形。

③一个能创建指定sidel和side2的矩形的构造方法。

④sidel和sidez的访问器方法。

⑤一个名为getArea()的方法,返回该矩形的面积。

⑥一个名为gelPerimeter()的方法,返回该矩形的周长。

⑦一个名为toString()的方法,返回该矩形的字符串描述。

代码:

package com.sdbi.liyan;

import java.util.Scanner;
public class Rectangle extends Geometric {
    double side1;//表示矩形的一边
    double side2;//表示矩形的另一边
    //一个无参构造方法创建矩形
    public Rectangle() {
    }
    //一个能创建指定sidel和side2的矩形的构造方法。
    public Rectangle(double side1,double side2) {
        this.side1=side1;
        this.side2=side2;
    }//sidel和sidez的访问器方法。
    public double getSide1() {
        return side1;
    }public double getSide2() {
        return side2;
    }//一个名为getArea()的方法,返回该矩形的面积。
    @Override
    double getArea() {
        Scanner cc=new Scanner(System.in);
        System.out.println("请输入长和宽,求矩形的面积");
        double s1=cc.nextDouble();
        double s2=cc.nextDouble();
        double S=s1*s2;
        System.out.println("边长为"+s1+"和"+s2+"的矩形的面积为:"+S);
        return S;
    }//一个名为gelPerimeter()的方法,返回该矩形的周长。
    @Override
    double getPerimeter() {
        Scanner cc=new Scanner(System.in);
        System.out.println("请输入长和宽,求矩形的周长");
        double s1=cc.nextDouble();
        double s2=cc.nextDouble();
        double C=(s1+s2)*2;
        System.out.println("边长为"+s1+"和"+s2+"的矩形的周长为:"+C);
        return C;
    }//一个名为toString()的方法,返回该矩形的字符串描述。
    @Override
    public String toString() {
        return "Rectangle [side1=" + side1 + ", side2=" + side2 + ", color=" + color + ", filled=" + filled
                + ", getSide1()=" + getSide1() + ", getSide2()=" + getSide2() + ", getArea()=" + getArea()
                + ", getPerimeter()=" + getPerimeter() + ", toString()=" + super.toString() + ", getClass()="
                + getClass() + ", hashCode()=" + hashCode() + "]";
    }
}

 

 

 

(4)设计一个名为Triangle的三角形类来实现Geometric类,该类包括:

①三个名为side1,side2和side3的double属性表示三角形的三条边。

②一个无参构造方法创建三角形。

③一个能创建指定side1,side2和side3的矩形的构造方法。

④sidel,side2和side3的访问器方法。

⑤一个名为getArea()的方法,返回该三角形的面积。

⑥一个名为getPerimeter()的方法,返回该三角形的周长。

⑦一个名为isTriangle()的方法,判断三边是否能构成三角形。

⑧一个名为toString()的方法,返回三边较小的字符串描述。

代码:

package com.sdbi.liyan;

import java.util.Scanner;
public class Triangle extends Geometric {
    double side1;
    double side2;
    double side3;
    //一个无参构造方法创建三角形。
    public Triangle() {
    }//一个能创建指定side1,side2和side3的矩形的构造方法。
    public Triangle(double side1,double side2,double side3) {
        this.side1=side1;
        this.side2=side2;
        this.side3=side3;
    }//sidel,side2和side3的访问器方法。
    public double getSide1() {
        return side1;
    }public double getSide2() {
        return side2;
    }public double getSide3() {
        return side3;
    }//一个名为getArea()的方法,返回该三角形的面积。
    @Override
    double getArea() {
        Scanner sr=new Scanner(System.in);
        System.out.println("请输入三个边长,求三角形的面积");
        double b1=sr.nextDouble();
        double b2=sr.nextDouble();
        double b3=sr.nextDouble();
        double p=(b1+b2+b3)/2;
        double S=Math.sqrt(p*(p-b1)*(p-b2)*(p-b3));
        System.out.println("边长为"+b1+"和"+b2+"和"+b3+"的三角形的面积为:"+S);
        return S;
    }//一个名为getPerimeter()的方法,返回该三角形的周长。
    @Override
    double getPerimeter() {
        Scanner sr=new Scanner(System.in);
        System.out.println("请输入三个边长,求三角形的周长");
        double b1=sr.nextDouble();
        double b2=sr.nextDouble();
        double b3=sr.nextDouble();
        double C=b1+b2+b3;
        System.out.println("边长为"+b1+"和"+b2+"和"+b3+"的三角形的周长为:"+C);
        return C;
    }//一个名为isTriangle()的方法,判断三边是否能构成三角形。
    public void isTriangle() {
        Scanner sr=new Scanner(System.in);
        System.out.println("请输入三个边长,判断能否构成三角形");
        double b1=sr.nextDouble();
        double b2=sr.nextDouble();
        double b3=sr.nextDouble();
        if (b1+b2>b3 && b1+b3>b2 && b2+b3>b1) {
            System.out.println("能构成三角形");
        }else {
            System.out.println("不能构成三角形");
        }
    }//一个名为toString()的方法,返回三边较小的字符串描述。
     public String toString() {
        Scanner sr=new Scanner(System.in);
        System.out.println("请输入三个边长,求最小边");
        double b1=sr.nextDouble();
        double b2=sr.nextDouble();
        double b3=sr.nextDouble();
        double min=b1;
        if (b1<b2) {
            if (b1<b3) {
            min=b1;    
            }else {
                min=b3;
            }
        }else if (b2<b1) {
            if (b2<b3) {
                min=b2;
            }else{
                min=b3;
            }
        }System.out.println("三边最小的是:"+min);
        return "三边最小的是:"+min;
    }
}

 

 

 

 

 

 (5)编写测试类,测试图形的面积和周长。

代码:

package com.sdbi.liyan;

import java.nio.channels.NonWritableChannelException;
import java.util.Scanner;

//(5)编写测试类,测试图形的面积和周长。
public class GeometricTest {
    public static void main(String[] args) {
        Triangle st=new Triangle();
        st.getArea();
        st.getPerimeter();
        st.isTriangle();
        st.toString();
        System.out.println("-----------------------------------------------------");
        Circle sc=new Circle();
        sc.getArea();
        sc.getPerimeter();
        System.out.println("-----------------------------------------------------");
        Rectangle sr=new Rectangle();
        sr.getArea();
        sr.getPerimeter();
        
        
    }
}