![](/img/trans.png)
[英]Can I use a method from a super class in a subclass without overriding it?
[英]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();
覆蓋B
的getMax
方法:
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不支持覆蓋類中的任何變量。
您可以通過兩種方法來實現。
通過構造函數傳遞變量 。 我建議這樣做,因為如果該方法執行相同的操作。 覆蓋它並再次執行它是一個不好的做法。
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);
覆蓋方法
@override public int getMax(){ max=200; //do the job. }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.