從頭認識java-6.2 繼承(Generalization)(1)
這一章節我們來聊聊繼承(Generalization)。
1.概念
繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充新的能力。
2.特點
子類繼承父類public和protected的屬性域與方法,但不繼承private的屬性域和方法。
當子類基礎父類的方法時,如果需要,可以覆蓋(@override),重新實現。
下面是一個例子
package com.ray.testobject;public class Test {public static void main(String[] args) {}}class Father {private int id;protected String name;public int sex;private void methodA() {}protected void methodB() {}public void methodC() {}public Father() {System.out.println(create father);}}class Sub extends Father {@Overrideprotected void methodB() {// TODO Auto-generated method stubsuper.methodB();}@Overridepublic void methodC() {// TODO Auto-generated method stubsuper.methodC();}public Sub() {System.out.println(create Sub);// System.out.println(id);//報錯System.out.println(name);System.out.println(sex);}}
3.跟父類的關係
我們修改上面的代碼來解釋,is-a 是一個和is-like-a 像一個
package com.ray.testobject;public class Test {public static void main(String[] args) {}}class Father {private int id;protected String name;public int sex;private void methodA() {}protected void methodB() {}public void methodC() {}public Father() {System.out.println(create father);}}class Sub1 extends Father {public Sub1() {System.out.println(create Sub);// System.out.println(id);//報錯System.out.println(name);System.out.println(sex);}}class Sub2 extends Father {private void say() {}public Sub2() {System.out.println(create Sub);// System.out.println(id);//報錯System.out.println(name);System.out.println(sex);}}
我們來看一下上面的代碼,sub1是直接繼承father,而且沒有其他的不同的方法,因此sub1是father的子類,是is-a關係;
而sub2,除了繼承father,還多了一個say 的方法,因此它跟father不完全相同,因此,它雖然是father的子類,但它們直接的關係是is-like-a的關係。
總結:我們這一章節主要討論了繼承的概念、特性以及子類與父類之間的關係。