黑马程序员技术交流社区

标题: 求图形面积与周长通用操作 [打印本页]

作者: Twinboss    时间: 2013-8-23 14:52
标题: 求图形面积与周长通用操作
本帖最后由 forward 于 2013-8-24 21:31 编辑

我想用继承多态的特点,把图形面积和周长的通用操作求出来,但是想了很久都没想出来,那位大神能帮我想想啊?最好有代码,让我找找思路。谢谢回复
作者: Lop_adoule    时间: 2013-8-23 15:05
其实我还没完全弄清楚这个题目所表达的意思,按照自己理解的写了下。

class Graph{
        public  double getArea(){
                return 0;}
        public  double  getGirth(){
                return 0;}
}
class Circle extends Graph{
        public static final  double PI=3.14;
        public double r;
        Circle(double r){
                this.r=r;
        }
        public double getArea(){
        return PI*r*r;
        }
        public double getGirth(){
                return 2*PI*r;
        }
}
class  Trigon extends Graph{
       
        public  double a;public  double b;
        public  double c;
        Trigon(double a,double b,double c){
                this.a=a;
                this.b=b;
                this.c=c;
                }
        public double getArea(){
        double s,p;
                p=(a+b+c)/2;
                s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
                return s;
        }
        public double getGirth(){
                return a+b+c;
        }
}

class GraphTest{
        public  static void main(String[]args){
          Graph m=new Trigon(3,4,5);
                System.out.println(m.getGirth());
                System.out.println(m.getArea());
        }
}
作者: 黑马-文鸿利    时间: 2013-8-23 15:16
/抽象的形状类
public abstract class Shape{ }

//接口
public interface IDisplay{
  void display(); //显示图形的基本信息
  double getArea(); //计算面积
  double getGirth(); //计算周长
}

//三角形类
public class Triangle extends Shape implements IDisplay{
  protected double a;
  protected double b;
  protected double c;

  public Triangle(double a, double b, double c){
    this.a = a; this.b = b; this.c = c;
  }

  @Override public double getArea() {
    double s = (a + b + c) / 2;
    return Math.sqrt(s*(s-a)*(s-b)*(s-c));
  }

  @Override public double getGirth() {
    return this.a + this.b + this.c;
  }

  @Override public void display() {
    System.out.println("三角形");
    System.out.println("边长:" + a + ", " + b + ", " + c);
  }
}

//矩形类
public class Rectangle extends Shape implements IDisplay {
  protected double width; protected double height;

  public Rectangle(double width, double height){
    this.width = width;
    this.height = height;
  }

  @Override public double getArea() {
    return this.width * this.height;
  }

  @Override public double getGirth() {
    return 2 * ( this.width + this.height);
  }

  @Override public void display() {
    System.out.println("矩形");
    System.out.println("宽:" + this.width + ", 高:" + this.height);
  }
}

//圆类
public class Circle extends Shape implements IDisplay {
  protected double radius;

  public Circle(double radius){
    this.radius = radius;
  }

  @Override public double getArea() {
    return Math.PI * this.radius * this.radius;
  }

  @Override public double getGirth() {
    return 2 * Math.PI * this.radius;
  }

  @Override public void display() {
    System.out.println("圆");
    System.out.println("半径:" + this.radius);
  }
}
作者: 杨增坤    时间: 2013-8-23 18:38
因为不同的图形的属性不一样,例如:
三角形:底和高,
矩形:长和宽
圆:半径
梯形:上底,下底和高,
总而言之:他们求自己面积和周长需要的属性不一样,也就是他们需要需要的条件元素,
               但是他们的都有面积和周长,所以要把他们公共的抽出来,那就是求周长和面积的方法,
方法:可以使用一个抽象类或者是接口,里面有求周长和面积的方法,再定义各个图形的类,都继承或者是实现抽象类或者是实现接口。
        然后在各自的类中重写周长和面积方法!
希望对你有帮助!

作者: say_NO!    时间: 2013-8-23 20:29
  1. <p>class Triangle {
  2.        
  3.         public static void main(String[]args){
  4.                 ChangFangXing c=new ChangFangXing(3,5);   
  5.                 System.out.println(c.zhouchang());
  6.                 System.out.println(c.mianji());
  7.                 }
  8.         }
  9.        
  10.         //定义长方形类,长和宽,我是拼音
  11. class ChangFangXing{     
  12.         double x;
  13.         double y;
  14.         ChangFangXing(double x,double y){
  15.                 this.x=x;
  16.                 this.y=y;
  17.                
  18.                 }</p><p>//周长
  19.         double zhouchang(){
  20.           return (x+y)*2;
  21.                         }</p><p>//面积
  22.           double mianji(){
  23.                                 return this.x*this.y;
  24.                                 }
  25.        
  26.                
  27.         }</p><p> </p>
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2