[英]Having trouble with Subclasses in java
我正在審閱教科書中的一個問題,我有些困惑。 代碼是:
public class BClass
{
private int x;
public void set(int a)
{
x=a;
}
public void print()
{
System.out.print(x);
}
}
public class DClass extends BClass
{
private int y;
public void set(int a, int b)
{
//Postcondition: x = a; y = b;
}
問題是:
一種。 編寫覆蓋它的DClass打印方法的定義。
b。 編寫類DClass的方法集的定義。
對於a,我是否正確地說,將以下內容放入子類將是成功的替代?
public void print()
{
System.out.print(x + " and " + y);
}
我對b也有麻煩。 因為有了后置條件,所以很明顯我應該將y(子類中的實例變量)設置為b。 我面臨的問題是如何將x設置為a。 因為實例變量x屬於父類,這是否使其無法直接訪問? 還是我被允許這樣做:
public void set(int a, int b)
{
x = a;
y = b;
}
非常感謝您的幫助,謝謝!
下面是正確的。 A不正確。 我只是想說那是重寫的工作方式。 我沒有看這種方法的有效性。
它應該是
public void print() {
super.print();
System.out.print(" and " + y);
}
對於B,您需要調用super方法,因此
public void set(int a, int b) {
super.set(a);
y = b;
}
x
在基類中聲明為private
。 這意味着在派生類中,您將無法訪問它進行設置或打印。 但是,基類確實具有公共方法來完成這兩種操作。 這些方法是在派生類中可見,這樣你就可以/必須使用的。
在DClass.print中,調用基類的print方法來打印x
:
public void print()
{
super.print();
System.out.print(" and " + y);
}
super
關鍵字用於在父類中調用print的實現。 沒有super.
在調用之前,它將調用派生類的相同打印方法,這將再次進行相同的調用,並由於堆棧溢出錯誤而迅速崩潰。
在DClass.set中,您同樣需要調用基類的set方法:
public void set(int a, int b)
{
super.set(a);
y = b;
}
在這里, super.
在set
調用之前是可選的,因為唯一名為set
方法僅接受1個參數,該方法位於基類中,並且不會被覆蓋(僅重載 )。 但是,包括super.
使其更清晰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.