1.任務描述
使用super調用父類中的方法和屬性。
2.技能要點
掌握super關鍵字的使用方法。
3.任務實現過程
源文件:Card.java
public class Card {
private String name;
private String sex;
private String tele ;
public Card(String theName){
this.name = theName;
}
public Card(){}
public String showName() {
return name;
}
//其他代碼
}
在這個例子中,將Card類中的屬性都是private的,通過各自的public的方法來存取。
源文件:friendCard.java
public class friendCard extends Card{
String address;
public friendCard(String friendName){
super(friendName);
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String showFriendName(){
return “My Friend “+ super.showName();
}
}
在子類friendCard中,如果使用下面的代碼段所示直接返回父類中的屬性name:
return “My Friend “+ super.name;
在編譯的時候,將會因爲訪問權限問題而出錯,將會出現下面的錯誤:
friendCard.java:17: name has private access in Card
return “My Friend “+ super.name;
1 error
這個時候,可以在showFriendName()方法中調用被覆蓋方法,得到需要的“name”屬性的值:
public String showFriendName(){
return “My Friend “+ super.showName();
}
這樣就解決了訪問權限的問題,也清晰地指明瞭在這個覆蓋方法中調用的showName()方法是父類中的方法。
注意:
如果不使用super指明此處調用的showName()方法的出處,系統依然會自動調用父類中的showName()方法。但是當子類中有同名方法覆蓋父類方法時,系統將會當做是子類自身的方法,當運行此程序時,將會遞歸地調用方法本身,引起程序錯誤。爲避免混淆,super關鍵字不要默認。