java中抽象类和接口的使用

-在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。

  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 abstract class Graph implements Comparable {
 public String color;
 public String fill;
 public String getColor(){
  return color;
 }
 public void setColor(String color){
  this.color=color;
 }
 public abstract double area();
 public abstract double perimeter();
 public int comparable(Graph graph){
  if(this.area()>graph.area()){
   return 1;
  }else if(this.area()<graph.area()){
   return -1;
  }else{
   return 0;
  }
 }
}
public class Circle extends Graph {
 private double radius;
 public Circle(double radius){
  super();
  this.radius=radius;
 }
 public double getRadius() {
        return radius;
    }
 public void setRadius(double radius) {
        this.radius = radius;
    }
 /* (non-Javadoc)
  * @see interfaces.Drawing#area()
  */
 @Override
 public double area() {
  // TODO Auto-generated method stub
  return 3.14*radius*radius;
 }
 /* (non-Javadoc)
  * @see interfaces.Drawing#perimeter()
  */
 @Override
 public double perimeter() {
  // TODO Auto-generated method stub
  return 3.14*2*radius;
 }
 /* (non-Javadoc)
  * @see interfaces.Comparable#compareTo(interfaces.Graph)
  */
 @Override
 public int compareTo(Graph graph) {
  // TODO Auto-generated method stub
  return 0;
 }
}
public class Square extends Graph {
 private double side;
 public Square(double side){
  super();
  this.side=side;
  
 }
 public double getSide() {
        return side;
    }
 public void setSide(double side) {
        this.side = side;
    }
 /* (non-Javadoc)
  * @see interfaces.Drawing#area()
  */
 @Override
 public double area() {
  // TODO Auto-generated method stub
  return side*side;
 }
 /* (non-Javadoc)
  * @see interfaces.Drawing#perimeter()
  */
 @Override
 public double perimeter() {
  // TODO Auto-generated method stub
  return 4*side;
 }
 /* (non-Javadoc)
  * @see interfaces.Comparable#compareTo(interfaces.Graph)
  */
 @Override
 public int compareTo(Graph graph) {
  // TODO Auto-generated method stub
  return 0;
 }
}
public class Rectangle extends Graph {
 private double length;
 private double width;
 public Rectangle(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() {
  // TODO Auto-generated method stub
  return length*width;
 }
 @Override
 public double perimeter() {
  // TODO Auto-generated method stub
  return (length+width)*2;
 }
 /* (non-Javadoc)
  * @see interfaces.Comparable#compareTo(interfaces.Graph)
  */
 @Override
 public int compareTo(Graph graph) {
  // TODO Auto-generated method stub
  return 0;
 }
 
}
public class TestGraph {
 public static void main(String[] args){
  Graph circle=new Circle(3.0);
  Graph square=new Square(4.0);
  Graph rectangle=new Rectangle(3.0,4.0);
  System.out.println("圆形的面积为:"+circle.area());
  System.out.println("圆形的周长为:"+circle.perimeter());
  System.out.println("正方形的面积为:"+square.area());
  System.out.println("正方形的周长为:"+square.perimeter());
  System.out.println("长方形的面积为:"+rectangle.area());
  System.out.println("长方形的周长为:"+rectangle.perimeter());
 }
}
public class TestGraphs {
 public static void main(String[] args) {
  Graph[] gra=new Graph[10];
  for(int i=0;i<3;i++){
  Circle c=new Circle(2.0+i);
  gra[i]=c;
  }
  for(int i=3;i<7;i++){
    Square s=new Square(3.0+i);
    gra[i]=s;
  }
  int max=(int) gra[0].area();
  for(int i=0;i<gra.length;i++){
    if(gra[i].area()>max){
      max=(int) gra[i].area();
    }
  }
  System.out.print(max);
 }

java图形的面积与周长计算程序抽像方法 java求矩形面积和周长接口_Graph


java图形的面积与周长计算程序抽像方法 java求矩形面积和周长接口_ide_02