package com.book.web.controller; /** * 父類 * @author liweihan * */ public class Parent { public String normalStr = "父類非靜態屬性"; public static String staticStr = "父類靜態屬性"; public String changeStr = "父類-變量"; public static String changeStaticStr = "父類-變量-靜態"; public void normalMethod() { System.out.println("父類非靜態方法!"); } public static void staticMethod() { System.out.println("父類靜態方法!"); } public void changeMethod() { changeStr = "改變父類的非靜態屬性"; changeStaticStr = "改變父類的靜態屬性"; } }
package com.book.web.controller; /** * 子類繼承父類 * @author liweihan * */ public class Child extends Parent{ public String normalStr = "子類-非靜態屬性"; public static String staticStr = "子類-靜態屬性"; // @Override public void normalMethod() { System.out.println("子類-非靜態方法!"); } /** * 靜態方法不能被重寫,因此,去掉Override */ // @Override public static void staticMethod() { System.out.println("子類-靜態方法!"); } }
package com.book.web.controller; /** * 測試類 * @author liweihan * */ public class Test { public static void main(String[] args) { Child child = new Child(); System.out.println(child.normalStr); System.out.println(child.staticStr); child.normalMethod(); child.staticMethod(); System.out.println("------------------- 靜態屬性、靜態方法和非靜態的屬性、非靜態方法均可以被 繼承"); //父類指向之類實例 Parent child1 = new Child(); System.out.println(child1.normalStr); System.out.println(child1.staticStr); child1.normalMethod(); child1.staticMethod(); System.out.println(" ================== 靜態屬性、靜態方法和非靜態的屬性均可以被 繼承 和 隱藏 而不可以被重寫"); //獲取變量的值 Parent parent = new Parent(); System.out.println("1 ... " + parent.changeStr); System.out.println("1 --- " + parent.changeStaticStr); Child child2 = new Child(); System.out.println("2 ... 子類獲取父類非靜態屬性值: " + child2.changeStr); System.out.println("2 --- 子類獲取父類靜態屬性值: " + child2.changeStaticStr); parent.changeMethod(); System.out.println("3 ... 子類獲取父類改變後非靜態屬性值 :" + child2.changeStr); System.out.println("4 ... 子類獲取父類改變的靜態屬性值:" + child2.changeStaticStr); System.out.println(" ------------- 父類中的靜態屬性值,父類初始化後,子類能夠直接使用!可是,非靜態屬性,不能夠這樣!"); /** * 結論: 1、對於非靜態屬性和方法: <1.>對於非靜態屬性,子類能夠繼承父類的非靜態屬性。可是,當子類和父類有相同的非靜態屬性時, 並無重寫並覆蓋父類的非靜態屬性,只是隱藏了父類的非靜態屬性。 <2.>對於非靜態方法,子類能夠繼承父類的非靜態方法並能夠重寫覆蓋父類的非靜態屬性方法。 2、對於靜態的屬性和方法 <1.>對於靜態屬性,子類能夠繼承父類的靜態屬性。可是和非靜態的屬性同樣,會被隱藏。 <2.>對於靜態的方法,子類能夠繼承父類的靜態方法。可是,子類不可重寫父類的靜態方法, 子類的同名靜態方法會隱藏父類的靜態方法。 3、http://www.cnblogs.com/kabi/p/5181941.html <1.>java中靜態屬性和靜態方法能夠被繼承,可是沒有被重寫(overwrite)而是被隱藏。 <2.>靜態方法和屬性是屬於類的,調用的時候直接經過類名.方法名完成的,不需繼承機制就能夠調用。 若是子類裏面定義了靜態方法和屬性,那麼這時候父類的靜態方法 或屬性稱之爲「隱藏」, 你若是想要調用父類的靜態方法和屬性,直接經過父類名.方法名或變量名完成, 至因而否繼承一說,子類是有繼承靜態方法和屬性,可是 跟實例方法和屬性不太同樣,存在「隱藏」的這種狀況。 <3.>靜態屬性、靜態方法和非靜態的屬性均可以被 繼承 和 隱藏 而不可以被重寫, 非靜態的方法能夠被繼承和重寫, */ } }