- 实验要求:
结合实验继承以及本实验中的内容,自行编写一个程序,实现以下功能。
编写一个基类Shape类,有计算面积,周长的方法,以及输出这些信息的方法。
分别定义一个长方形类和正方形类,可以利用一定的继承机制。
还定义一个圆形(有半径属性),继承Shape类,并重写Shape中的三个方法。
最后在测试类中,定义一个静态方法
public static void fun(Shape shape),在里面调用shape的输出方法。
在Test类的main方法中,分别实例化一个长方形,正方形,圆形对象,并分别调用静态方法fun,分别以这些实例为入口参数,来输出这些对象的相关信息。
public class ShapeTest {
//定义静态方法
public static void fun(Shape shape){
shape.output();
}
public static void main(String[] args) {
//实例化对象
Shape r=new Rectangle(4.1,2.5);
Shape s=new Square(5);
Shape c=new Circle(4);
//调用静态方法
fun(r);
fun(s);
fun(c);
}
}
class Shape{
//因为暂未学习抽象类,定义两个计算方法,返回0值。
double area(){
return 0;
}
double perimeter(){
return 0;
}
//输出计算值
void output(){
//获取当前调用类的名字
System.out.println(this.getClass().getName()+"的周长是:"+area());
System.out.println(this.getClass().getName()+"的面积是"+perimeter());
}
}
class Rectangle extends Shape{
//定义长方形的长和宽,并将子类重构
double length,width;
public Rectangle(double length,double width){
this.length=length;
this.width=width;
}
//重写父类的计算方法
@Override
double area() {
return length*width;
}
@Override
double perimeter() {
return (length+width)*2;
}
}
//因为正方形的计算方法和长方形一样所以为了避免麻烦
//直接让正方形继承长方形的方法了
class Square extends Rectangle{
//对其成员变量的值进行更改
public Square(double length){
super(length,length);
}
}
class Circle extends Shape{
//定义圆的半径和圆周率
final static double PI=3.14;
double r;
public Circle(double r){
this.r=r;
}
//重写方法
@Override
double perimeter() {
return 2*PI*r;
}
@Override
double area() {
return PI*r*r;
}
}