簡體   English   中英

如何從Java中的超類方法獲取子類值?

[英]How can I get subclass value from super class method in Java?

我有這兩節課:

Class A 
{
  public int max = 100;

  public int getMax()
  {
     return max;
  }
}



Class B extends A
{
  public int max = 200;
}

我編寫以下代碼:

A clsA = new A();
B clsB = new B();


valA = clsA.getMax();
valB = clsB.getMax();

valA是100 valB又是100

我怎么寫這樣的代碼clsB.getMax(); 返回200?

您可以在B類中覆蓋getMax:

  @Override
  public int getMax()
  {
     return max;
  }

雖然,總的來說,在超類和子類中具有相同名稱的變量是一個壞主意。

請注意,更改后,以下內容也會返回200:

A clsB = new B();
valB = clsB.getMax();

覆蓋BgetMax方法:

class B extends A
{
    public int max = 200;

    public int getMax()
    {
       return max;
    }
}

在getter方法中, return max; 等價於return this.max ,其中this引用了B的當前實例。 另一方面,調用return super.max將返回父子類中引用的max字段值。

簡短的答案是,您不能像嘗試的那樣覆蓋子類中的成員。 相反,您應該做的是使B直接更改max的值。 像這樣:

class B extends A
{
    public B() 
    {
        max = 200;
    }
}

您必須將方法getMax()添加到類B 實現方式可能與A類相同

@Overwrite
public int getMax()
{
   return max;
}

當您不覆蓋方法時, B調用父方法的方法getMax() 父方法getMax()返回150

嘗試方法覆蓋

在Java中,將調用“最接近的方法”。 由於clsB擴展了A,但沒有它自己的getMax()定義,因此將調用A的getMax()版本。 但是,由於clsB也共享A的變量,因此getMax(從A類調用)將返回A類的編號。

解決方案?

public int getMax()
{
     return max;
}

到B級。

實施方法覆蓋概念

 @Override
  public int getMax()
  {
     return max;
  }

覆蓋在運行時發生

A clsB = new B();
valB = clsB.getMax();

希望這應該工作。

Java不支持覆蓋類中的任何變量。

您可以通過兩種方法來實現。

  1. 通過構造函數傳遞變量 我建議這樣做,因為如果該方法執行相同的操作。 覆蓋它並再次執行它是一個不好的做法。

    Class A { public int max = 100; public A(int maxVal) { this.max=maxVal; } public int getMax(){ return max; } } B clsB = new B(); A clsA = new A(clsB.max);

  2. 覆蓋方法

    @override public int getMax(){ max=200; //do the job. }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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