学号:117333440127
姓名:黄瑞生
题目、编写Java程序。
(1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
①抽象图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取图形周长等;
②使用构造方法为其成员属性赋初值;
③在每个派生类中都重写toString()方法,返回所有属性的信息;
④根据文字描述合理设计类的其他成员属性和方法。
(2)设计实现画板类,要求:
①画一个红色、无填充、长和宽分别为10.0与5.0的长方形;
②画一个绿色、有填充、半径为3.0的圆形;
③画一个黄色、无填充、边长为4.0的正方形;
④分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。
2、基于上题背景,设计实现以下程序:
(1)设计Comparable接口,接口中设计compareTo()方法,用来比较对象。此方法的返回值类型设计为int类型。此方法接收一个参数,参数类型为图形类。
(2)在图形类中实现compareTo()方法,用来比较两个图形的面积大小。
(3)在测试类中,创建图形类的数组,数组中存放多个圆形、正方形、长方形对象,使用compareTo()方法找出数组中面积最大的图形。
提示:比较对象时,可以将compareTo()方法的返回值设置为1、0、-1,来代表比较结果,当前对象大、两者相等或者当前对象小。再次提醒,此题涉及的代码全部展示在此题的题号下,与上一题相独立
第一题:
首先创建抽象类图形类
package zuoye;
/**
*
* <p>Title: Figure</p>
* <p>Description:图形基类 </p>
* <p>Company: </p>
* @author haungruisheng
* @date 20192019年9月27日上午8:45:32
*/
public abstract class Figure implements Comparable{
private String color;
boolean fill;
public Figure(String color, boolean fill) {//构造方法
this.color=color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public static boolean isFill() {
return true;
}
public void setFill(boolean fill) {
this.fill = fill;
}
//抽象方法:
public abstract double area();
public abstract double perimeter();
}
创建图形类的子类正方形类:
package zuoye;
public class Square extends Figure{
public Square(String color, boolean fill,double side) {//构造方法
super(color, fill);
this.side=side;
}
private double side;//正方形边长
public double area() {
return side*side;
};
public double perimeter() {
return side*2;
}
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
};
//tostring方法
public String toString() {
return "正方形的边长是:"+side;
}
}
创建图形类的子类正方形类:圆形类
package zuoye;
public class Round extends Figure{
private double radius;//圆的半径
public Round(String color,boolean fill,double radius) {//构造方法
super(color,fill);
this.radius=radius;
};
public double area() {
return Math.PI*radius*radius;
};
public double perimeter() {
return Math.PI*2*radius;
}
public double getRadius() {
return radius;
}
public double setRadius(double radius) {
return this.radius = radius;
};
//tostring 方法
public String toString() {
return "圆的半径是:"+radius;
}
}
创建图形类的子类正方形类:长方形类
package zuoye;
public class Rectangle extends Figure{
public Rectangle(String color, boolean fill,double width,double height) {
super(color, fill);
this.width=width;
this.height=height;
}
private double width;//长方形宽
private double height;//长方形高
public double area() {
return width*height;
};
public double perimeter() {
return width*2+height*2;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
};
//tostring 方法
public String toString() {
return "长方形宽是:"+width+"长方形的高是:"+height;
}
}
三个子类中分别有自己的属性和计算面积周长的方法
创建好三个基类的子类以后就可以创建一个画板类
package zuoye;
public class DrawingBoard {
public static void main(String[] args) {
//圆
Round r=new Round( "green",true ,3.0);
System.out.println("圆:"+"\n"+"圆面积是:"+r.area()+"\n"
+"圆周长是:"+r.perimeter()+"\n"+r+"\n"
+"圆的颜色是:"+r.getColor()+"\n"+"是否填充:"+r.isFill());
//正方形
Square s=new Square("yellow", false,4.0);
System.out.println("正方形:"+"\n"+"正方形面积是:"+s.area()+
"\n"+"正方形的周长是:"+s.perimeter()+"\n"+s+"\n"+
"正方形颜色是:"+s.getColor()+"\n"+"是否填充:"+s.isFill());
//长方形
Rectangle c=new Rectangle("red",false,10.0,5.0);
System.out.println("长方形:"+"\n"+"长方形面积是:"+c.area()+
"\n"+"长方形的周长是:"+c.perimeter()+"\n"+c+"\n"+
"长方形颜色是:"+c.getColor()+"\n"+"是否填充:"+c.isFill());
}
}
最后控制台输出结果:
圆:
圆面积是:28.274333882308138
圆周长是:18.84955592153876
圆的半径是:3.0
圆的颜色是:green
是否填充:true
正方形:
正方形面积是:16.0
正方形的周长是:8.0
正方形的边长是:4.0
正方形颜色是:yellow
是否填充:true
长方形:
长方形面积是:50.0
长方形的周长是:30.0
长方形宽是:10.0长方形的高是:5.0
长方形颜色是:red
是否填充:true
总结:在抽象类图形基类中创建属性颜色和是否填充(boolean),并且有抽象方法计算面积和周长,三个子类分别有自己的属性,然后重写父类的抽象方法,在画板类传参到三个子类并且返回面积和周长在画板类进行打印
第二题:
首先创建一个图形接口类
package zuoye;
/**
*
* <p>Title: Comparable</p>
* <p>Description: 图形接口类</p>
* <p>Company: </p>
* @author huangruisheng
* @date 20192019年9月27日上午9:07:56
*/
public interface Comparable {
/**
* 定义两个抽象方法
*/
public abstract double area();
public abstract double perimeter();
}
其次创建多个图形对象数组
package zuoye;
public class TestFigure {
public static void main(String[] args) {
//实例化图形对象数组
Figure [] f=new Figure[10];
for(int i=0;i<3;i++) {
Round r1=new Round("red",true,2.0+i);
f[i]=r1;
}
for(int i=3;i<7;i++) {
Square s1=new Square ("yellow",false,3.0+i);
f[i]=s1;
}
for(int i=7;i<10;i++) {
Rectangle rr=new Rectangle("green",true,3.0+i,4.0+i);
f[i]=rr;
}
Figure max=f[10];
for(int i=0 ; i<f.length;i++) {
if(f[i].area()>max.area()) {
max=f[i];
}
}
System.out.println(max.area());
}
}