在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。
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,来代表比较结果,当前对象大、两者相等或者当前对象小。再次提醒,此题涉及的代码全部展示在此题的题号下,与上一题相独立。
| 抽象类 | 接口 |
|---|---|
| 实现方式 | 实现方式 |
| 因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 | 接口完全是抽象的。它根本不存在方法的实现 |
| – | – |
| 构造器 | 构造器 |
| 抽象类可以有构造器 | 接口不能有构造器 |
| – | – |
| 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符。 |
| main方法 | main方法 |
| – | – |
| 抽象方法可以有main方法并且我们可以运行它 | 不能再main方法中运行 |
| 多继承 | 多继承 |
| – | – |
| 抽象方法可以继承一个类和实现多个接口 | 接口只可以继承一个或多个其它接口 |
| 速度 | 速度 |
| – | – |
| 抽象类比接口速度要快 | 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 |
/**
*
*<p>Title:Figure</p>
*<p>Description:抽象图形类</p>
* @author 赖文卓
* @date 2019年9月27日
*/
public abstract class Figure implements Comparable{
public abstract double area();//面积
public abstract double Perimeter();//周长
public int compareTo(Figure figure){
if(this.area()>=figure.area()){
if(this.area()==figure.area()){
return 0;
}else {
return 1;
}
}else{
return -1;
}
}
}
/**
*
*<p>Title:Rectangle</p>
*<p>Description:长方形类</p>
* @author 赖文卓
* @date 2019年9月27日
*/
public class Rectangle extends Figure {
public double longs;
public double wide;
double areas=0;
double perimeters=0;
public Rectangle(double longs,double wide) {
this.longs=longs;
this.wide=wide;
}
public Rectangle(){
}
public double getLongs() {
return longs;
}
public void setLongs(double longs) {
this.longs = longs;
}
public double getWide() {
return wide;
}
public void setWide(double wide) {
this.wide = wide;
}
@Override
public double area() {
return areas=longs*wide;
}
@Override
public double Perimeter() {
return perimeters=2*(longs+wide);
}
public String toString(){
return "长方形的面积为:"+(int)areas+"长方形的周长为:"+(int)perimeters;
}
@Override
public int compareTo(Figure figure) {
// TODO Auto-generated method stub
return 0;
}
}
/**
*
*<p>Title:Round</p>
*<p>Description:圆形类</p>
* @author 赖文卓
* @date 2019年9月27日
*/
public class Round extends Figure {
public double radius;
double areas=0;
double perimeters=0;
public Round(double radius) {
this.radius=radius;
}
public Round() {
return;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public double area() {
return areas=Math.PI*radius*radius;
}
@Override
public double Perimeter() {
return perimeters=2*Math.PI*radius;
}
@Override
public String toString() {
return "圆的面积:"+(int)areas+"圆的周长:"+(int)perimeters;
}
@Override
public int compareTo(Figure figure) {
// TODO Auto-generated method stub
return 0;
}
}
/**
*
*<p>Title:Square</p>
*<p>Description:正方形类</p>
* @author 赖文卓
* @date 2019年9月27日
*/
public class Square extends Figure{
public double side;
double areas=0;
double perimeters=0;
public Square(double side) {
this.side=side;
}
public Square() {
}
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
}
@Override
public double area() {
return areas=side*side;
}
@Override
public double Perimeter() {
return perimeters=4*side;
}
public String toString(){
return "正方形的面积为:"+(int)areas+"正方形的周长为:"+(int)perimeters;
}
@Override
public int compareTo(Figure figure) {
// TODO Auto-generated method stub
return 0;
}
}
import java.util.Scanner;
/**
*
*<p>Title:Palette</p>
*<p>Description:绘画类</p>
* @author 赖文卓
* @date 2019年9月27日
*/
public class Palette {
public static void main(String[] args) {
Round round=new Round();//圆形
Scanner sc=new Scanner(System.in);
System.out.println("请输入圆的半径:");
round.setRadius(sc.nextDouble());
round.area();
round.Perimeter();
System.out.println(round);
Square square=new Square();//正方形
System.out.println("请输入正方形的边长:");
square.setSide(sc.nextDouble());
square.area();
square.Perimeter();
System.out.println(square);//长方形
Rectangle rectangle=new Rectangle();
System.out.println("请输入长方形的长:");
rectangle.setLongs(sc.nextDouble());
System.out.println("请输入长方形的宽:");
rectangle.setWide(sc.nextDouble());
rectangle.area();
rectangle.Perimeter();
System.out.println(rectangle);
}
}
/**
*
*<p>Title:Comparable</p>
*<p>Description:Comparable接口</p>
* @author 赖文卓
* @date 2019年9月26日
*/
public interface Comparable {
public int compareTo(Figure figure);
}
/**
*
*<p>Title:Main</p>
*<p>Description:Main方法</p>
* @author 赖文卓
* @date 2019年9月27日
*/
public class Main {
public static void main(String[] args) {
Figure[] figures=new Figure[4];
figures[0]=new Square(10);
figures[1]=new Round(10);
// figures[1]=new Square(10);
figures[2]=new Rectangle(1, 1);
Figure a=null;
for(int i=0;i<figures.length;i++){
if(i==0){
a=figures[i];
}else {
if(a.compareTo(figures[i])==-1){
a=figures[i];
}
}
}
System.out.println(a.area());
}
}
2万+

被折叠的 条评论
为什么被折叠?



