黑马程序员_多态性编写代码可以提高拓展性

------- android培训java培训、期待与您交流! ----------

 

用图形类作抽象类,在抽象类中定义了面积的抽象方法,另定义三角形类、梯形类和圆类继承图形类,在各自的类中定义了相关类的属性和方法,重写面积方法。最后定义主类,在主类中定义一个以抽象类为参数的方法,利用多态性原则,调用面积方法,提高了代码的拓展性!实现代码如下:

import java.lang.Math;           //因为要运用到数学公式开方,所以要先导入包Java.lang.Math

abstract class Grap                //图形抽象类
{

//在抽象类中定义面积方法体
public abstract double getArea();
}
class Trangle extends Grap          //三角形
{

//三边边长为a,b,c

private double a;
private double b;
private double c;

//周长per和面积area
private double per;
private double area;
public Trangle(double a,double b,double c){     //设置三角形三边的长
if((a+b)>c&&(b+c)>a&&(a+c)>b){
this.a=a;
this.b=b;
this.c=c;
}else{
System.out.println("三角形三边的设置有误,不能构成三角形,请重新设置");
}
}
public double getPerimeter(){              //返回周长
per=a+b+c;
return per;
}
public double getArea(){                   //返回三角形的面积
double q=(a+b+c)/2;
area=Math.sqrt(q*(q-a)*(q-b)*(q-c));
return area;
}
}




/*

定义梯形类,该类继承图形类,在类中的构造器中初始化了梯形的边长和覆盖了图形类中的抽象方法

*/

class Lader extends Grap  {
private double a;
private double b;
private double h;
private double area;
public Lader(double a,double b,double h){        //设置梯形的上底下底和高
this.a=a;
this.b=b;
this.h=h;
}
public double getArea(){                    //返回梯形面积
area=(a+b)*h/2;
return area;
}


}

/*

定义圆形类,该类继承图形类

*/

class Circle  extends Grap         {
private double r;
private double per;
private double area;
static final double PI=3.14;
public void Circle(double r){         //设置半径
if(r>0){
this.r=r;}
else{
System.out.println("半径不能为负");
}
}
public double getPerimeter(){        //计算周长
per=2*PI*r;
return per;
}
public double getArea(){           //计算圆面积
area=PI*r*r;
return area;
}
}

/*

定义主类

*/
public class GraphicsA
{
public static void main(String args[]){
function(new Trangle(3,4,5));         //调用function()方法
function(new Lader(3,5,5));
}

//以Grap为参数,目的就是利用向上转型调用子类中的覆盖方法,即实现多态性

public static void function(Grap g){                      

   System.out.println(g.getClass().getName()+"面积为:"+g.getArea());
if(g instanceof Trangle){
Trangle t=(Trangle)g;
System.out.println("周长为:"+t.getPerimeter());
}else if(g instanceof Circle){
Circle c=(Circle)g;
System.out.println("周长为:"+c.getPerimeter());
}
}

}


运行效果如图:

 

------- android培训java培训、期待与您交流! ----------

详情请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值