根据UML图编写Java程序
package threewekend;//定义一个名为threewekend的包
import java.awt.Color;//导入java.awt.Colo
//父类
abstract class Shape{ //声明一个Shape类
public static final double PI = 3.14; //定义一个PI常量
public Color color; //定义一个颜色属性
//抽象方法
public double getArea(){
return 0;
}
public double getPerimeter(){
return 0;
}
}
//继承抽象类Shape
class Circle extends Shape{
private double r;
public Circle() {
}
public Circle(double r) {
this.r=r;
}
/**
* @return r
*/
public double getR() {
return r;
}
/**
* @param r 要设置的 r
*/
public void setR(double r) {
this.r = r;
}
public double getArea() {
return (PI*r*r); //获取圆的面积
}
public double getPerimeter() {
return (2*PI*r);
}
/*
* @see java.lang.Object#toString()
*/
@Override
//覆盖方法toString()实现自定义输出圆的信息
public String toString() {
return "Circle [" + r + "]";
}
}
class Triangle extends Shape{
private double a;
private double b;
private double c;
public Triangle() {
// TODO 自动生成的构造函数存根
}
public Triangle(double a,double b,double c) {
this.a=a;
this.b=b;
this.c=c;
}
/**
* @return a
*/
public double getA() {
return a;
}
/**
* @param a 要设置的 a
*/
public void setA(double a) {
this.a = a;
}
/**
* @return b
*/
public double getB() {
return b;
}
/**
* @param b 要设置的 b
*/
public void setB(double b) {
this.b = b;
}
/**
* @return c
*/
public double getC() {
return c;
}
/**
* @param c 要设置的 c
*/
public void setC(double c) {
this.c = c;
}
public double getArea() {
double l=(a+b+c)/2;
double S = Math.sqrt(l*(l-a)*(l-b)*(l-c));
return S;
}
public double getPerimeter() {
return (a+b+c);
}
//覆盖方法toString()实现自定义输出三角形的信息
public String toString() {
return "Triangle["+a+","+b+","+c+"]";
}
}
//继承抽象类Shape
class Rectangle extends Shape{
private double length;
private double width;
public Rectangle() {
}
public Rectangle(double length,double width) {
this.length=length;
this.width=width;
}
/**
* @return length
*/
public double getLength() {
return length;
}
/**
* @param length 要设置的 length
*/
public void setLength(double length) {
this.length = length;
}
/**
* @return width
*/
public double getWidth() {
return width;
}
/**
* @param width 要设置的 width
*/
public void setWidth(double width) {
this.width = width;
}
public double getArea() {
return (length*width);
}
public double getPerimeter() {
return 2*(length+width);
}
//覆盖方法toString()实现自定义输出矩形的信息
public String toString() {
return "Rectangle["+length+","+width+"]";
}
}
//继承抽象类Shape
public class ShapeTest {
public void addOne(Shape shape) {
if((shape instanceof Circle)) { //判断shape是否为Circle类
Circle c1 = (Circle)shape;//shape强制转化成Circle类
c1.setR(c1.getR()+1);
System.out.println(c1.toString());
}
if((shape instanceof Triangle)) { //判断shape是否为Triangle类
Triangle t1 = (Triangle)shape;//shape强制转化成Triangle类
t1.setA(t1.getA()+1);
t1.setB(t1.getB()+1);
t1.setC(t1.getC()+1);
System.out.println(t1.toString());
}
if((shape instanceof Rectangle)) {//判断shape是否为Rectangle类
Rectangle r1 = (Rectangle)shape;//shape强制转化成Rectangle类
r1.setLength(r1.getLength()+1);
r1.setWidth(r1.getWidth()+1);
System.out.println(r1.toString());
}
}
public static void main(String[] args) {
Circle c = new Circle(5); //用Circle类创建对象c
Triangle t = new Triangle(3,4,5);//用Triangle类创建对象t
Rectangle r = new Rectangle(4,5);//用Rectangle类创建对象r
System.out.println(c.toString());
System.out.println("圆的面积:"+c.getArea());
System.out.println("圆的周长:"+c.getPerimeter());
System.out.println(t.toString());
System.out.println("三角形的面积:"+t.getArea());
System.out.println("三角形的周长:"+t.getPerimeter());
System.out.println(r.toString());
System.out.println("矩形的面积:"+r.getArea());
System.out.println("矩形的周长:"+r.getPerimeter());
ShapeTest st = new ShapeTest();
st.addOne(c);//调用ShapeTest的方法
}
}
结果如下
Circle [5.0]
圆的面积:78.5
圆的周长:31.400000000000002
Triangle[3.0,4.0,5.0]
三角形的面积:6.0
三角形的周长:12.0
Rectangle[4.0,5.0]
矩形的面积:20.0
矩形的周长:18.0
Circle [6.0]