在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。
1、编写Java程序。
(1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
①抽象图形类中有方法获取图形面积、获取图形周长等;
②使用构造方法为其成员属性赋初值;
③在每个派生类中都重写toString()方法,返回所有属性的信息;
④根据文字描述合理设计类的其他成员属性和方法。
(2)设计实现画板类,要求:
分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。
2、基于上题背景,设计实现以下程序:
(1)设计Comparable接口,接口中设计compareTo()方法,用来比较对象。此方法的返回值类型设计为int类型。此方法接收一个参数,参数类型为图形类。
(2)在图形类中实现compareTo()方法,用来比较两个图形的面积大小。
(3)在测试类中,创建图形类的数组,数组中存放多个圆形、正方形、长方形对象,使用compareTo()方法找出数组中面积最大的图形。
提示:比较对象时,可以将compareTo()方法的返回值设置为1、0、-1,来代表比较结果,当前对象大、两者相等或者当前对象小。再次提醒,此题涉及的代码全部展示在此题的题号下,与上一题相独立。
首先,定义一个图形类(抽象类)
package com.abstracts;
public abstract class Graphs implements Comparable{
public String color;
public boolean fill;
public abstract double area();
public abstract double perimeter();
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean isFill() {
return fill;
}
public void setFill(boolean fill) {
this.fill = fill;
}
@Override
public int comparTo(Graphs swap) {
int i=0;
if(this.area()>swap.area()){
i=1;
}else if(this.area()<swap.area()){
i=-1;
}else{
i=0;
}
return i;
}
}
其次定三个子类
package com.abstracts;
/**
*
* @Description: 圆形继承抽象类
*/
public class Circle extends Graphs {
private double r;
public Circle(double r) {
super();
this.r = r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
@Override
public double area() {
return Math.PI * r * r;
}
@Override
public double perimeter() {
return 2 * Math.PI * r;
}
@Override
public String toString() {
return "Circle [r=" + r + "]";
}
}
package com.abstracts;
/**
*
* @Description: 长方形继承抽象类
*/
public class Rectangles extends Graphs{
private double length;
private double width;
//创造构造方法,可以在实例化的时候直接初始化
public Rectangles(double length, double width) {
super();
this.length = length;
this.width = width;
}
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 area() {
return length * width;
}
@Override
public double perimeter() {
return (length + width) * 2;
}
@Override
public String toString() {
return "Rectangles [length=" + length + ", width=" + width + "]";
}
}
package com.abstracts;
/**
*
* @Description: 正方形继承抽象类
*/
public class Square extends Graphs{
private double side;
public Square(double side) {
super();
this.side = side;
}
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
}
@Override
public double area() {
return side *side;
}
@Override
public double perimeter() {
return side * 4;
}
@Override
public String toString() {
return "Square [side=" + side + "]";
}
}
然后写一个接口,并实现
package com.abstracts;
public interface Comparable {
public int comparTo(Graphs swap);
}
最后定义一个测试类,
package com.abstracts;
import java.awt.Rectangle;
public class TestGraphs {
public static void main(String[] args) {
//使用多肽的形式实例化图形类
Graphs circle = new Circle(3.0);
Graphs rectangles = new Rectangles(3.0,4.0);
Graphs square = new Square(4.0);
/*Circle c = new Circle(3.0);
System.out.println(c.area());
System.out.println(c.perimeter());
Rectangles r = new Rectangles(2, 3);
System.out.println(r.area());
System.out.println(r.perimeter());
Square s = new Square(4);
System.out.println(s.area());
System.out.println(s.perimeter());*/
Graphs[] g=new Graphs[10];
for(int i = 0;i<4;i++){
Circle c=new Circle(3.0+i);
g[i]=c;
}
for(int i = 4;i<6;i++){
Square s=new Square(5.0+i);
g[i]=s;
}
for(int i = 6;i<10;i++){
Rectangles r=new Rectangles(2.0+i,3.0+i);
g[i]=r;
}
Graphs max=g[0];
for(int i=0;i<=g.length-1;i++){
if(max.comparTo(g[i]) == -1){
max=g[i];
}
}
System.out.println(max.toString()+max.area());
}
}