代码分两部分来现实:
- 先求出各个图形的面积和周长;
- 在比较各个图形的大小;
第一点解答如下:
(创建一个图形类Graph;派生类:圆形类Circle、正方形类Square、长方形类Rectangle;测试类TestGraph)
代码如下:
//创建图形类Graph
public abstract class Graph implements Comparable {
/*
* 定义area、girth抽象方法求面积和周长;子类要抽象这两个方法,(当子类也是抽象类时可不抽象父类的抽象方法)
*/
public abstract double area();
public abstract double girth();
public int comparaTo(Graph graph){
if(this.area()>graph.area()){
return 1 ;
}else if(this.area()<graph.area()){
return -1 ;
}else{
return 0 ;
}
}
}
//创建圆形类Cricle
public class Cricle extends Graph {
private double radius; //声明圆半径
private String green; //声明圆颜色
private String HavePadding; //声明圆填充
public Cricle(double radius) {
this.radius = radius;
}
public Cricle(double radius,String green,String HavePadding) {
this.radius = radius;
this.green = green;
this.HavePadding = HavePadding;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
//重写父类Graph抽象类中的area()方法
public double area() {
return Math.PI * radius * radius;
}
//重写父类Graph抽象类中的girth()方法
public double girth() {
return 2 * Math.PI * radius;
}
public String toString() {
return " 颜色 = " + green + ", 是否填充 = " + HavePadding + "";
}
public int comparable(Graph graph) {
// TODO Auto-generated method stub
return 0;
}
}
//创建正方形类Square
public class Square extends Graph {
private double side; //声明正方形边长
private String yellow; //声明正方形颜色
private String NotPadding; //声明正方形填充
public Square(double side) {
this.side = side;
}
public Square(double side,String yellow,String NotPadding) {
this.side = side;
this.yellow = yellow;
this.NotPadding = NotPadding;
}
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
}
//重写父类Graph抽象类中的area()方法
public double area() {
return side * side;
}
//重写父类Graph抽象类中的girth()方法
public double girth() {
return 4 * side;
}
@Override
public String toString() {
return " 颜色 = " + yellow + ", 是否填充 = " + NotPadding + "";
}
public int comparable(Graph graph) {
// TODO Auto-generated method stub
return 0;
}
}
//创建长方形类Rectangle
public class Rectangle extends Graph {
private double length; //声明长方形长和宽
private double width;
private String red; //声明长方形颜色
private String HavePadding; //声明长方形填充
public Rectangle(double length, double width) {
this.length=length;
this.width=width;
}
public Rectangle(double length,double width,String red,String HavePadding) {
this.length = length;
this.width = width;
this.red = red;
this.HavePadding = HavePadding;
}
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;
}
//重写父类Graph抽象类中的area()方法
public double area() {
return length * width;
}
//重写父类Graph抽象类中的girth()方法
public double girth() {
return (length + width)*2;
}
public String toString() {
return " 颜色 = " + red + ", 是否填充 = " + HavePadding + "";
}
public int comparable(Graph graph) {
// TODO Auto-generated method stub
return 0;
}
}
//创建测试类
public class TestGraph{
public static void main(String[] args) {
//分别实例化square、cricle、rectangle
Graph square = new Square(4.0,"黄色","无填充");
Graph cricle = new Cricle(3.0,"绿色","有填充");
Graph rectangle = new Rectangle(10.0,5.0,"红色","有填充");
//进行打印输出各个图形的面积与周长
System.out.println("正方形信息为 :" + square.toString() + "\n"+"正方形的面积为 :"+ square.area()+" 正方形的周长为 :" + square.girth() +"\n");
System.out.println("圆形信息为 :" + cricle.toString() + "\n"+"圆形的面积为 :"+ cricle.area()+" 圆形的周长为 :" + cricle.girth() +"\n");
System.out.println("长方形信息为 :" + rectangle.toString() + "\n"+"长方形的面积为 :"+ rectangle.area()+" 长方形的周长为 :" + rectangle.girth() +"\n");
}
}
- 在比较各个图形的大小;
第二点解答如下:
- (创建一个接口Comparable;接口中创建一个comparaTo()方法找出数组中面积最大的图形。)
- (图形类Graph实现接口并重新comparaTo()方法)
- (创建一个TestGraphs测试类)
代码如下:
public interface Comparable {
public int comparable(Graph graph);
}
public class TsteGraphs {
public static void main(String[] args) {
//实例化图像对象数组
Graph[] gra = new Graph[10];
for(int i=0;i<3;i++){
Cricle c = new Cricle(2.0+i);
gra[i] = c;
}
for(int i=3;i<7;i++){
Square s = new Square(3.0+i);
gra[i] = s;
}
for(int i=7;i<10;i++){
Rectangle r = new Rectangle(3.0+i,4.0+i);
gra[i] = r;
}
Graph max = gra[0]; //认为第一个面积是最大的,再用for比较,把最大的赋值给max
for(int i=0;i<gra.length;i++){
if(gra[i].area()>max.area()){
max = gra[i];
}
}
System.out.println("最大图形为:"+max.area());
}
}