在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们
可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,
可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。
1、编写Java程序。
(1)使用继承机制,分别设计实现抽象类 图形类,子类类圆形类、正方形类、长方形类,要求:
①抽象类图形类中有属性包括画笔颜色(String类型)、图形是否填充(boolean类型:true表示填充,false表示不填充),
有方法获取图形面积、获取图形周长等;
②使用构造方法为其属性赋初值;
③在每个子类中都重写toString()方法,返回所有属性的信息;
④根据文字描述合理设计子类的其他属性和方法。
(2)设计实现画板类,要求:
①画一个红色、无填充、长和宽分别为10.0与5.0的长方形;
②画一个绿色、有填充、半径为3.0的圆形;
③画一个黄色、无填充、边长为4.0的正方形;
④分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。
主方法类【类名Test】
public class Test {
public static void main(String[] args){
//圆形对象
Circular c = new Circular();
// 设置半径、颜色、填充
c.setRadius(3.0);
c.setPenColor("绿色");
c.setFilled(true);
//长方形对象
Rectangle r = new Rectangle();
//设置长、宽、颜色、填充
r.setFilled(false);
r.setPenColor("红色");
r.setLength(10.0);
r.setWidth(5.0);
//正方形对象
Square s = new Square();
//设置边长、颜色、填充
s.setFilled(false);
s.setPenColor("黄色");
s.setLength(4.0);
System.out.println(r);
System.out.println(c);
System.out.println(s);
}
}
图形抽象类【类名Graph】
//图形抽象类
public abstract class Graph {
//图形属性
private String penColor;
private boolean isFilled;
//获得面积
public abstract double getArea();
//获得周长
public abstract double getCircumference();
// setter and getter
public String getPenColor() {
return penColor;
}
public void setPenColor(String penColor) {
this.penColor = penColor;
}
public boolean isFilled() {
return isFilled;
}
public void setFilled(boolean filled) {
isFilled = filled;
}
}
圆形类【Circular】
//圆形类
public class Circular extends Graph {
//圆形属性
private double radius;
private static final double PI = 3.14;
//构造方法
public Circular(){
}
public Circular(double radius,String penColor,boolean isFilled) {
this.radius = radius;
this.setFilled(isFilled);
this.setPenColor(penColor);
}
// setter and getter
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double getArea() {
return PI * radius * radius;
}
@Override
public double getCircumference() {
return PI * 2.0 * radius;
}
@Override
public String toString() {
return this.getPenColor() + (this.isFilled() ? ",无" : ",有") + "填充,"
+ "半径为" + this.getRadius() + ",面积为" + this.getArea() + ",周长为" + this.getCircumference();
}
}
长方形类【类名Rectangle】
// 长方形类
public class Rectangle extends Graph{
//长方形属性
private double length;
private double width;
//构造方法
public Rectangle(){
}
public Rectangle(double length, double width, String penColor, boolean isFilled){
this.length = length;
this.width = width;
this.setPenColor(penColor);
this.setFilled(isFilled);
}
// setter and getter
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
// 覆盖
@Override
public double getArea() {
return this.getLength() * this.getWidth();
}
@Override
public double getCircumference() {
return this.getLength() * 2.0 + this.getWidth() * 2.0;
}
@Override
public String toString() {
return this.getPenColor() + (this.isFilled() ? ",无" : ",有") + "填充,"
+ "长为" + this.getLength() + ",宽为:" + this.getWidth() + ",面积为" + this.getArea() + ",周长为" + this.getCircumference();
}
}
正方形类【类名Square】
// 正方形类
public class Square extends Graph{
// 正方形属性
private double length;
// 构造方法
public Square(){
}
public Square(double length, String penColor, boolean isFilled) {
this.length = length;
this.setPenColor(penColor);
this.setFilled(isFilled);
}
// setter and getter
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
// 周长和面积
@Override
public double getArea() {
return length * length;
}
@Override
public double getCircumference() {
return length * 4.0;
}
@Override
public String toString() {
return this.getPenColor() + (this.isFilled() ? ",无" : ",有") + "填充,"
+ "边长为" + this.getLength() + ",面积为" + this.getArea() + ",周长为" + this.getCircumference();
}
}
运行结果
红色,有填充,长为10.0,宽为:5.0,面积为50.0,周长为30.0
绿色,无填充,半径为3.0,面积为28.259999999999998,周长为18.84
黄色,有填充,边长为4.0,面积为16.0,周长为16.0