1、编写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 iom.hqr;
/** 抽象类(图形类)
* @author hqr
* 2019.09.26
*
*/
public abstract class Figure implements Comparable {
//面积方法
public abstract double area();
//周长方法
public abstract double perimter();
//画笔颜色属性
public String color;
//填充属性
public boolean padding;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean isPadding() {
return padding;
}
public void setPadding(boolean padding) {
this.padding = padding;
}
@Override //重写接口方法
public int compareTo(Figure swp) {
// TODO 自动生成的方法存根
if(this.area()>swp.area()){
return 1;
}else if (this.area()<swp.area()) {
return -1;
}else {
return 0;
}
}
}
正方形类
package iom.hqr;
/** 正方形
* @author hqr
*
*/
public class Square extends Figure {
//边长
public double log;
//构造方法
public Square(double log) {
super();
this.log = log;
}
public double area() {
// TODO 自动生成的方法存根
return log*log;
}
@Override
public double perimter() {
// TODO 自动生成的方法存根
return 4*log;
}
@Override
public String toString() {
return "Square [log=" + log + "]";
}
@Override//重写接口方法
public int compareTo(Figure swp) {
// TODO 自动生成的方法存根
return 0;
}
}
长方形类
package iom.hqr;
/** 长方形类
* @author hqr
*
*/
public class Rectangle extends Figure {
//长
public double length;
//高
public double hegith;
//构造方法
public Rectangle(double length, double hegith) {
super();
this.length = length;
this.hegith = hegith;
}
@Override
public double area() {
// TODO 自动生成的方法存根
return length*hegith;
}
@Override
public double perimter() {
// TODO 自动生成的方法存根
return (length+hegith)*2;
}
}
圆形类
package iom.hqr;
/** 圆形
* @author hqr
*
*/
public class Circular extends Figure{
//圆半径
public double r;
//构造方法
public Circular(double r) {
super();
this.r = r;
}
@Override
public double area() {
// TODO 自动生成的方法存根
return 3.14*(r*r);
}
@Override
public double perimter() {
// TODO 自动生成的方法存根
return 2*(3.14*r);
}
@Override
public String toString() {
return "Circular [r=" + r + "]";
}
@Override//重写接口方法
public int compareTo(Figure swp) {
// TODO 自动生成的方法存根
return 0;
}
}
接口
package iom.hqr;
/**接口
* @author hqr
*2019.09.27
*/
//定义规则
public interface Comparable {
public int compareTo(Figure swp);
}
测试类
package iom.hqr;
import java.awt.geom.Area;
/** 测试类
* @author hqr
*
*/
public class Text {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
Rectangle a = new Rectangle(10.0,5.0);
Circular a1 = new Circular(3.0);
Square a2 = new Square(4.0);
a.setColor("红色");
a1.setColor("绿色");
a2.setColor("黄色");
System.out.println("长方形:"+a.getColor()+" "+a.isPadding()+" "+"面积:"+a.area()+"周长:"+a.perimter());
System.out.println("圆:"+a1.getColor()+" "+a1.isPadding()+" "+"面积:"+a1.area()+"周长:"+a1.perimter());
System.out.println("正方形:"+a2.getColor()+" "+a1.isPadding()+" "+"面积:"+a1.area()+"周长:"+a1.perimter());
Figure[] figures= { a,a1, a2};
Figure fi=figures[0];
for (int i = 0; i < figures.length; i++) {
if (fi.compareTo(figures[i])==-1) {
fi=figures[i];
}
}
System.out.println("\n面积最大的是:"+fi.area());
}
}