5.1 案例
下面我们再上一次的继承的基础上增加一个类:四边形类的子类—梯形类。
比如我们的面积计算器,增加了一个功能,就是也能够计算的梯形的面积。规定:矩形和平行四边形的面积计算公式为宽x高;梯形的面积计算公式为(上底+下底)x 高/2。首先我们看这个梯形类如何加入进来。
上一次继承的结果:
class Quadr{ //定义父类--四边形类—父类
public double height;
public double width;
public String name;
public Quadr(double h,double w,String name) {
this.height=h;
this.width=w;
this.name=name;
}
public void calcuArea() {
System.out.println(name+"面积为:"+height*width);
}}
class Rect extends Quadrangle{ //定义子类--矩形类 public Rect (double h,double w,String name) {
super(h,w,name);
}}
class Paral extends Quadrangle{ //定义子类--平行四边形类 public Paral (double h,double w,String name) {
super(h,w,name);
}}
5.2 代码
思考:我们仍然可以采用继承来实现,但是梯形的面积计算方法与矩形和平行四边形不同,如何以最简洁的方法实现代码?
具体加入代码如下:
class Trape extends Quadr{ //定义子类--梯形类
//根据个性化特征增加一个成员变量
public double w_dowm; //自定义成员变量--上底宽
//依据新的成员变量,重载构造函数
public Trape (double h,double w,double w_down,String name)
{
super(h,w, name);
this.w_dowm =w_down;
}
@Override
public void calcuArea() { //覆盖父类的面积计算方法 System.out.println(name+"面积为:"+height*(width+w_dowm)/2);
}}
public class Test{
public static void main(String[] args) {
Rect rec=new Rect (1, 2,"矩形");
rec.calcuArea();
Paral par=new Paral (1, 3,"平行四边形");
par.calcuArea();
Trape tra=new Trape (1, 1, 2,"梯形");
tra.calcuArea();
}}
5.3 代码分析
以上案例中展示的是在java中覆盖(Override)的运用,在继承中,父类的有些方法在子类中不适用,子类可以进行重新定义。在本案例中,梯形类对calcuArea方法实现了覆盖。