请设计类,描述一系列的几何图形,包括矩形,圆形,三角形。
- 这些图形都有面积,周长两种属性
- 这些图形,都可以被画出来(输出或打印出来,即都有一个draw方法)
请定义类,来描述以上几何图形,并考虑类中成员变量的访问权限,并提供必要的方法进行属性(成员变量的)访问。
public class day1301 {
public static void main(String[] args) {
//以Rectangle为例
Rectangle rectangle = new Rectangle(10, 15);
//调用draw方法
rectangle.draw();
//获取area属性
System.out.println(rectangle.getArea());
//改变area属性
rectangle.setArea(20);
System.out.println(rectangle.getArea());
}
}
abstract class Graph {
private int area;
private int girth;
//定义构造方法
public Graph(int area, int girth) {
this.area = area;
this.girth = girth;
}
//draw方法与图形有关因此为抽象方法
abstract void draw();
//定义获取属性信息的一系列方法
public int getArea() {
return area;
}
public void setArea(int area) {
this.area = area;
}
public int getGirth() {
return girth;
}
public void setGirth(int girth) {
this.girth = girth;
}
}
//矩形类
class Rectangle extends Graph {
//获取父类的对象中成员变量的值(调取父类的构造方法)
public Rectangle(int area, int girth) {
super(area, girth);
}
//覆盖draw方法
@Override
public void draw() {
System.out.println("Rectangle");
}
}
//圆形类
class Circle extends Graph {
public Circle(int area, int girth) {
super(area, girth);
}
@Override
void draw() {
System.out.println("Circle");
}
}
//三角形类
class Triangle extends Graph {
public Triangle(int area, int girth) {
super(area, girth);
}
@Override
void draw() {
System.out.println("Triangle");
}
}
思路:定义Graph类并将属性设为私有,因此要构造获取方法,因为不知什么图形,故将draw方法定义为抽象方法;
将其他图形继承Graph覆盖draw方法,
其中利用super将子类对象初试化.
super注意事项:
a.必须保证子类构造方法都要满足子类对象的初始化流程;
b.在子类构造方法中通过super调用必须放在第一条的位置;
c.this(调用当前类的构造方法)和super(调用父类的构造方法)都可以写在构造方法中它们都需要在第一条位置且不能共存.