上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 ()方法,计算出矩形的面积。