Java是一門面向?qū)ο蟮木幊陶Z(yǔ)言,在類的繼承關(guān)系中,有一些不同于普通變量和方法的靜態(tài)成員和構(gòu)造函數(shù),在此我們來(lái)探討一下Java中父類子類靜態(tài)和構(gòu)造的一些關(guān)鍵點(diǎn)。
在Java中父類和子類都可以擁有靜態(tài)變量和靜態(tài)方法,而且靜態(tài)變量和靜態(tài)方法都可以通過(guò)類名直接調(diào)用,不需要實(shí)例化對(duì)象。
public class Parent { static int parentStaticVar = 10; static void parentStaticMethod() { System.out.println("Parent static method"); } } public class Child extends Parent { static int childStaticVar = 20; static void childStaticMethod() { System.out.println("Child static method"); } }
在上述代碼中,我們定義了一個(gè)父類Parent和子類Child,兩者都擁有一個(gè)靜態(tài)變量和靜態(tài)方法。此時(shí)我們可以通過(guò)類名直接調(diào)用這些靜態(tài)成員:
Parent.parentStaticVar; // 10 Parent.parentStaticMethod(); // Parent static method Child.childStaticVar; // 20 Child.childStaticMethod(); // Child static method
在Java中,構(gòu)造函數(shù)也和靜態(tài)成員一樣,可以被繼承。子類默認(rèn)會(huì)調(diào)用父類的構(gòu)造函數(shù)方法,在子類構(gòu)造函數(shù)中可以使用super()
明確表示調(diào)用父類的構(gòu)造函數(shù),若不明確指定則會(huì)調(diào)用父類中的無(wú)參構(gòu)造函數(shù)。
public class Parent { int parentInstanceVar; Parent() { System.out.println("Parent constructor without args"); } Parent(int pVar) { parentInstanceVar = pVar; } } public class Child extends Parent { int childInstanceVar; Child(int pItemVar) { // default call to super() constructor childInstanceVar = pItemVar; } Child(int pItemVar, int pParentVar) { super(pParentVar); // explicitly call Parent(int) constructor childInstanceVar = pItemVar; } }
在上述代碼中,我們定義了一個(gè)父類Parent和子類Child,兩者都擁有兩個(gè)構(gòu)造函數(shù),表示有和無(wú)參構(gòu)造函數(shù)。子類的構(gòu)造函數(shù)分別調(diào)用了父類的有參構(gòu)造函數(shù)和無(wú)參構(gòu)造函數(shù),這里通過(guò)super()
方法明確指定了調(diào)用父類構(gòu)造函數(shù)的類型。
在使用Java繼承時(shí),需要關(guān)注父類和子類中的靜態(tài)成員和構(gòu)造函數(shù)的特殊行為,以充分發(fā)揮面向?qū)ο缶幊痰膬?yōu)勢(shì)。