这里单纯只给出了一个例子,对于抽象类的解释,烦请客官移步这里
一篇文章带你深入理解和掌握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());
}
}