簡體   English   中英

在Java中遇到子類問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM