问题描述
定义一个图形抽象类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;
}
}