有人可以解釋一下當(dāng)我們擴(kuò)展時同名方法是否會被覆蓋嗎?A 類 ab = 新 B 類?ab 看到哪些方法?A類:public class ClassA { public static int count = 0; public void print(){ System.out.println("Print A"); } public static void printNumber() { System.out.println("Class A " + (++count)); }}B 類: B 類中哪些方法將被重寫?public class ClassB extends ClassA { public static int count=0; public void print() { System.out.println("Class B"); } public static void printNumber() { System.out.println("Class B " + (++count)); }}測試類: 這里會調(diào)用哪個方法?public class ClassTest { public static void main(String [] arg) { ClassA a = new ClassA(); ClassB b = new ClassB(); ClassA ab = new ClassB(); a.print(); a.printNumber(); b.print(); b.printNumber(); ab.print(); //Why when we call print() method returns print method of ClassA ab.printNumber() ;// Why when we call printNumber() method return method of ClassB }}
1 回答

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊
調(diào)用靜態(tài)方法取決于聲明類型而不是實(shí)例化類型。
所以在這一行中:
ClassA ab = new ClassB(); ^ ^ declared type instantiated type
ab 將始終使用其聲明類型 ( Class A
) 的靜態(tài)方法——如果printNumber();
您的 IDE 實(shí)際上應(yīng)該為您提供如下建議:
通過實(shí)例引用訪問靜態(tài)成員 ClassA.printNumber()
并且可能會建議將該行調(diào)整為:
ClassA.printNumber();
這與調(diào)用動態(tài)方法(例如print()
)不同,動態(tài)方法將始終嘗試調(diào)用實(shí)例化類型的重寫方法(在 ab 的情況下,實(shí)例化類型是ClassB
)
添加回答
舉報
0/150
提交
取消