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

来源:互联网 发布:淘宝卖家都用什么软件 编辑:程序博客网 时间:2024/05/22 09:40
------- 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

0 0
原创粉丝点击