繼承是在一些比較一般的類(超類)的基礎上構造、建立、擴充新類(子類)的一種手段。并且子類與超類之間一般存在is-a關系,例如:在理論上來說,在Manager與Employee之間存在著明顯的is-a關系。is-a關系是繼承的一個明顯的特征。
3.注意點
- 繼承簡化了人們對事物的認識和描述,能清晰的體現相關類間的層次結構關系。
- 繼承提供了軟件復用功能。若類B繼承類A,那么建立類B時只需要在描述與超類(類A)不同的少量特征(數據成員和成員方法)即可。這種方法能減少代碼量和數據冗余度,大大增加程序的重用性。
- 繼承通過增強一致性來減少模塊間的接口與界面,大大增加了程序的易維護性。
- 提供了多重繼承機制。從理論上來說,一個類可以多個超類的 子類 ,它可以從多個 超類 中繼承屬性與方法,這便是多繼承。 但java處于安全性和可靠性的考慮,僅支持單重繼承,而通過接口機制來實現多重繼承。
inheritance/ManagerTest.java
package inheritance;public class ManagerTest{public static void main(String[] args){//constrcut a Manager objectManager boss = new Manager("Cracker",80000,1988,12,15);boss.setBonus(5000);Employee[] staff = new Employee[3];//fill the staff arry with Manager and Employee objectstaff[0] = boss;staff[1] = new Employee("Harry",50000,1986,10,1);staff[2] = new Employee("Tommy",40000,1987,3,15);//PRint out information about all Employee objects//體現了多態與動態捆綁for(Employee e : staff)System.out.println("name:" + e.getName() + ",salary:" + e.getSalary());}}inheritance/Employee.java
package inheritance;import java.util.Date;import java.util.GregorianCalendarpublic class Employee {private String name;private double salary;private Date hireDay;public Employee(String n,double s ,int year,int month,int day){name = n;salary = s;GregorianCalendar calendar = new GregorianCalendar(year, month-1, day);hireDay = calendar.getTime();}public String getName(){return name;}public double getSalary(){return salary;}public Date getHireDay(){return hireDay;}public void raiseSalary(double byPercent){double raise = salary * byPercent / 100;salary += raise;}}inheritance/Manager.java
package inheritance;//Manager類繼承了Employee類public class Manager extends Employee{private double bonus;public Manager(String n, double s, int year, int month, int day){//利用super關鍵詞調用Employee類的構造器super(n, s, year, month, day);bonus = 0;}//覆蓋了Employee類中的getSalary方法public double getSalary(){//用super關鍵字調用Employee類的方法double baseSalary = super.getSalary();return baseSalary + bonus;}public void setBonus(double b){bonus = b;}}super調用超類的方法
Manager類中的getSalary方法返回薪水和獎金的總和,由于Employee類中的salary為private,所以在Manager類中用使用超類的salary時需使用super來調用。super調用超類的構造器
Manager類的構造器不能訪問Employee類的私有域,所以必須利用Employee類的構造器對這部分私有數據進行初始化。super調用構造器的語句必須是子類構造器的第一條語句。新聞熱點
疑難解答