多态的编程java,java多态编程实例应用

问题:利用多态编程创建一个图形(Shape)类,实现求正方形(Square),三角形(Triangle),圆(Circle)的面积,

方法:抽象一个共享父类,定义一个函数为求面积的公共界面,再重新定义各形状的求面积函数。在主类中创建不同类的对象,并求得不同形状的面积。

进入正题...

在同一个包下分别建立以下五个类,运行TestShape类即可!

// 抽象类--图形--------------------------------------

public abstract class Shape {

//抽象方法取得图形的面积

public abstract double getArea();

}

// 正方形继承图形的类-------------------------------

public class Square extends Shape {

// 正方形的边长

private double height = 0;

// 构造函数

public Square(double height) {

this.height = height;

}

//@Override

public double getArea() {

return (this.height * this.height); // Math.pow(this.height , 2);

}

}

//圆继承图形的类-------------------------

public class Circle extends Shape {

// 圆的半径

private double r = 0;

// 圆周率

private final static double PI = 3.14;

// 构造函数

public Circle(double r) {

this.r = r;

}

@Override

public double getArea() {

return (PI * r * r);

}

}

//三角形继承图形的类------------------------------

public class Triangle extends Shape {

// 三角形的边1

private double a = 0;

// 三角形的边2

private double b = 0;

// 三角形的边3

private double c = 0;

// 三角形的高

private double h = 0;

// 构造函数,已知三角形的高和底

public Triangle(double a, double h) {

this.a = a;

this.h = h;

}

// 构造函数,已知三角形的三边长度

public Triangle(double a, double b, double c) {

this.a = a;

this.b = b;

this.c = c;

}

@Override

public double getArea() {

if (h == 0) {

// 根据海伦公式求三角形的面积

double s = (a+b+c)/2;

return Math.pow(s*(s-a)*(s-b)*(s-c), 0.5);

} else {

// 普通公式

return ( a * h / 2);

}

}

}

//测试类--------------------------------------------

public class TestShape {

public static void main(String[] args) {

// 构造一个边长为3的正方形

Shape square = new Square(3) ;

// 构造一个半径为2的圆

Shape circle = new Circle(2) ;

// 构造一个边长分别为3,4,5的三角形(根据勾股定理知道是直角三角形)

Shape triangle1 = new Triangle(3, 4, 5);

// 构造一个高和底分别为3,4的三角形

Shape triangle2 = new Triangle(3, 4);

System.out.println(square.getArea());

System.out.println(circle.getArea());

System.out.println(triangle1.getArea());

System.out.println(triangle2.getArea());

}

}

测试结果:

9.0

12.56

6.0

6.0

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值