设计一个类Shape(图形)包含求面积和周长的area()方法和perimeter()方法以及设置颜色的方法SetColor(),并利用Java多态技术设计其子类Circle(圆形)类、Rectangle(矩形)类和Triangle(三角形)类,并分别实现相应的求面积和求周长的方法。每个类都要覆盖toString方法。
海伦公式:三角形的面积等于s(s-a)(s-b)(s-c)的开方,其中s=(a+b+c)/2
测试类中测试上面的类及其相应功能
要求(1)能够体现向上转型,向下转型等,Shape s1=new Circle();
体现this、super等关键字的两种使用及各子类/超类的构造方法的调用顺序;
package javaTest;
import java.math.*;
public class Demo05 {
public static void main(String[] args) {
Shape s1=new Cir(5);
s1.SetColor("蓝色");
System.out.println(s1.toString());
Shape s2=new Rectangle(2, 5);
s2.SetColor("黄色");
System.out.println(s2.toString());
Shape s3=new Triangle(2, 2, 2);
s3.SetColor("红色");
System.out.println(s3.toString());
}
}
class Shape{
String color;
public String SetColor(String c){
color=c;
return color;
}
public double area(){
return 0;
}
public double perimeter(){
return 0;
}
}
class Cir extends Shape{
int r;
public Cir(int r) {
super();
this.r = r;
}
final double pi=3.14;
@Override
public double area() {
return pi*r*r;
}
@Override
public double perimeter() {
// TODO Auto-generated method stub
return 2*pi*r;
}
@Override
public String toString() {
return "Cir area=" + area() + ", perimeter=" + perimeter() + "color="+super.color;
}
}
class Rectangle extends Shape{
int a;
int b;
public Rectangle(int a, int b) {
super();
this.a = a;
this.b = b;
}
@Override
public double area() {
// TODO Auto-generated method stub
return a*b;
}
@Override
public double perimeter() {
// TODO Auto-generated method stub
return 2*(a+b);
}
@Override
public String toString() {
return "Rectangle area=" + area() + ", perimeter=" + perimeter() + ",color="+super.color;
}
}
class Triangle extends Shape{
int a;
int b;
int c;
public Triangle(int a, int b, int c) {
super();
this.a = a;
this.b = b;
this.c = c;
}
@Override
public double area() {
double s=(a+b+c)/2;
return Math.sqrt(s*(s-a)*(s-b)*(s-c));
}
@Override
public double perimeter() {
// TODO Auto-generated method stub
return a+b+c;
}
@Override
public String toString() {
return "Triangle area=" + area() + ", perimeter=" + perimeter() + ",color:"+super.color;
}
}