成員方法的繼承與覆蓋與成員變數的繼承與覆蓋類似,但有區別。
類似在於可以繼承的成員變數和成員方法的類型是相同的,可以繼父類的public和protected成員方法。
區別在於成員方法是真的覆蓋,定義與父類相同的方法之後,在父類中相同的方法在子類中是不存在的。
首先要確定什麼是相同的方法?相同的方法指的是:方法名相同、參數個數相同、參數類型相同、傳回值類型。與參數的名字無關。
例如,下面的方法是相同的方法:
public void setAge(int age){...}
public void setAge(int sage){...}
下面的方法是不同的方法:
public void setAge(int age){...}
public void setAge(String age){...}
注意:子類在覆蓋父類的方法的時候,不能修改傳回值類型,不能縮小存取權限,下面的兩種方式都是錯誤的。
父類中:
public int getA(){
return a;
}
子類中:
protected int getA(){ // 縮小了存取權限
return a;
}
public String getA(){ // 修改了傳回值類型
return String.valueOf(a);
}
方法用於定義行為,方法的覆蓋是子類修改了父類中該行為的實現方式。方法的覆蓋與多態有關。
如果方法沒有覆蓋,會直接繼承,如果被覆蓋,父類的該方法在子類中就不存在了。
下面這道題,會是什麼結果呢?
package test;
public class Parent {
public int a=10;
public int getA(){
return a;
}
}
package test;
public class Child extends Parent{
public int a=20;
public int getParentA(){
return super.a;
}
public int getChildA(){
return a;
}
}
package test;
public class Test {
public static void main(String args[]){
Child child = new Child();
System.out.println(((Parent)child).a);
System.out.println(child.getParentA());
System.out.println(child.getChildA());
System.out.println(child.getA());
}
}
查看運行結果:
10
10
20
10
請注意最後一個。
上一次:第三十六講 成員變數的繼承與覆蓋下一次:第三十八講 抽象類別與抽象方法李緒成 CSDN Blog:http://blog.csdn.net/javaeeteacher邀請您為好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5