Java开发之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

细节22 子承父业——继承

继承也是面向对象的基本特征之一。通过继承,子类可以具有父类的某些属性和方法,不需要重新编写相同的代码,同时,还可以在子类中重写父类的某些属性和方法,或增加新的属性和方法,以满足不同的需要。

Java语言只支持单继承,使用extends关键字来表示两个类之间的继承关系,其语法格式如下:

    class 子类extends 父类{
      类体;
    }

其中,父类是已经存在的类,该类具有某些共有的属性和方法,子类是从父类中继承某些已有属性和方法的类,并且在子类中,还可以增加新的属性和方法或重写父类中的某些属性和方法。

假设类B是类A的子类,则类B与类A的继承关系如图5.18所示。

图5.18 类B与类A的继承关系

说明

从如图5.17所示的类B与类A的继承关系可以看出,在子类B中不必定义父类A中的属性和方法,但是却可以使用类A的属性和方法,这就是继承的好处,可以充分利用已有代码,而不必再定义重复的代码,同时,子类B 中还可以增加了新的属性和方法,用以满足不同功能的需要。

父类Shape的代码示例:

    public class Shape {
      private int sideNumber;
      public void setSideNumber (int sideNumber){
          this. sideNumber = sideNumber;
      }
      public int getSideNumber (){
          return sideNumber;
      }
    }

子类Rectangle的代码示例:

    public class Rectangle extends Shape {
      private double area;                    // 定义表示矩形面积的成员变量area
      public double computeArea (double w , double h){
          if (w <= 0 || h <= 0) {           // 判断矩形的长和宽是否小于等于0
            JOptionPane. showMessageDialog (null, "矩形的长和宽必须大于0。");
            return 0;                         // 返回0
          }
          return w * h ;                      // 返回矩形的面积
      }
    }

使用子类Rectangle的示例:

    Rectangle rect = new Rectangle ();               // 创建子类对象
    ❶rect. setSideNumber (4);                        // 调用从父类Shape中继承的方法
    ❷int sideNum = rect. getSideNumber ();           // 调用从父类Shape中继承的方法
    System. out. println ("矩形的边数是:" + sideNum); // 输出矩形的边数
    ❸double area = rect. computeArea (10 , 20); // 调用子类Rectangle中的新增方法,求矩形面积
    System. out. println ("矩形的面积是:" + area);   // 输出矩形的面积

说明

本示例首先创建了子类Rectangle的实例,接着在标记❶处调用从父类Shape中继承的setSideNumber ()方法设置图形的边数,然后在标记❷处调用从父类Shape 中继承的getSideNumber ()方法获得图形的边数,紧接着又在标记❸处调用子类Rectangle自身新增的computeArea ()方法,计算出矩形的面积。