![](/img/trans.png)
[英]How to access (shadowing) member variables in subclass from method in superclass?
[英]How to access information from a superclass and subclass?
我想做的是從超類及其子類訪問信息(變量,方法等)。
如果我對繼承的了解是正確的,那么默認情況下,通過訪問超類,我們可以訪問其子類。 因此,我認為我只需要能夠訪問父(超級)類。
但是我該怎么做呢?
我不會在這里發布所有代碼,這會將這篇文章變成3頁。
超類只是創建聯系人的通用代碼,需要訪問超類的類是創建數組列表並將每個聯系人記錄在數組列表中的類。
我並不是想為我編寫代碼,但是對於理解它如何工作的所有幫助將不勝感激。
為了簡短起見,除非需要,否則我不會發布子類。
聯系人(超類):
public class Contacts
{
protected String fname;
protected String lname;
protected String email;
protected String phone;
public Contacts(String fname, String lname, String email, String phone)
{
this.fname=fname;
this.lname=lname;
this.email=email;
this.phone=phone;
}
public String getfname()
{
return fname;
}
public void setfname(String first)
{
this.fname=first;
}
public String getlname()
{
return lname;
}
public void setlname(String last)
{
this.lname=last;
}
public String getemail()
{
return email;
}
public void setemail(String e)
{
this.email=e;
}
public String getphone()
{
return phone;
}
public void setphone(String num)
{
this.phone=num;
}
public String getFullName()
{
String full=fname+" "+lname;
return full;
}
我對這段代碼沒有做太多事情,因為我一直在試圖弄清楚它而不真正知道從哪里開始。 我不認為參數應該為null,而只是包括那些滿足邪惡編譯器要求的參數。
地址簿:
import java.util.ArrayList;
public class AddressBook
{
Contacts enteredContact = new Contacts(null, null, null, null);
}
這是了解其中包含內容的子類之一。
朋友(子類):
public class Friend extends Contacts
{
private String dob;
/**
* Constructs a new Friend object. (Insert any further description that is needed)
* @param fname
* @param lname
* @param email
* @param phone
*/
public Friend(String fname, String lname, String email, String phone)
{
super(fname, lname, email, phone);
}
/**
* @return the dob
*/
public String getDob()
{
return dob;
}
/**
* @param dob the dob to set
*/
public void setDob(String dob)
{
this.dob = dob;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString()
{
return fname+", "+lname+", "+email+", "+phone+", "+dob;
}
}
如果我對繼承的了解是正確的,那么默認情況下通過訪問父類可以訪問其子類,因此我認為我只需要能夠訪問父類(父類)。
不,通過訪問超類,您只能訪問被sub-class覆蓋的sub-class方法。 子類為自己創建的方法,即使它是公共的,也無法被超類的對象訪問。
使用super
功能/關鍵字訪問父類。 您可以像這樣調用父方法
super.methodName();
要訪問父構造函數,可以使用super()
方法以以下方式進行操作。
super(null, null, null, null);
如果類擴展了超類,則它將繼承其所有成員。 它可以直接訪問非private
的。
僅供參考,您可以使用super()
構造函數來初始化字段。
public class AddressBook {
public AddressBook(String fname, String lname, String email, String phone) {
super(null, null, null, null);
}
}
如果我對繼承的了解是正確的,則默認情況下,通過訪問超類,您可以訪問其子類。
不,這是倒退。 通過訪問子類,您可以訪問超類的字段,但僅限於該字段的可見性和確定性。 您可以根據需要使用super()
訪問它們。
將繼承視為家譜。 超類是您的父母。 您的父母無法訪問您的任何私有字段,但您已經從您的私有字段中繼承了很多私有字段。
我看到了關於什么是超類和子類的基本誤解。
在我看來,您給人的印象是Contacts的子類是fname,lname等?
這些稱為成員,或者在這種情況下更合適的是:實例成員。
子類將是擴展Contacts的類,如下所示:
public class ContactsSubclass extends Contacts {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.