[英]Inherited variables and methods in java
我覺得輸出是2 child 2
筆直2 child 2
但結果是child 1 2
?
當父項指向子項時,應使用子項中的變量和方法,但在子項字符串后將打印1。 為什么在si之前打印字符串? 為什么引用父母的i副本?
這是我的示例代碼:
public class Abc
{
int i=1;
public int getStr()
{
system.out.print("parent");
return i;
}
public static void main(int[] a)
{
Abc s = new child();
system.out.print(s.i + " " + s.getStr());
}
}
class child
{
int i=2;
public int getStr()
{
system.out.print("child");
return i;
}
}
我在這里假設您的意思是child
要擴展Abc
,而“ psv”則意味着public static void
。 另外,我假設Class Abc
實際上是Class Abc
class Abc
,而system.out.print
實際上是System.out.print
(大寫問題)。
在main
,將創建一個新child
並將其分配給Abc
引用。 JVM必須先將表達式參數評估為System.out.println
然后再將其傳遞給方法。
si
靜態解析為Abc
的i
或1
沒有帶變量的多態性,只有方法。
然后評估調用getStr()
。 child
類將覆蓋getStr()
,因此它將首先打印child
,並返回范圍– 2
的i
。
回到main
,表達評價飾面- 1
加一個空間,加上2
。 因此,該表達式將在已打印的child
緊隨其后被打印。
child1 2
假設孩子確實擴展了Abc,請進行一項更改。 不要在孩子中聲明我,而應從Abc繼承。 換句話說,在孩子里,改變
int i=2;
至
i=2;
注意:您需要將其放入構造函數中。 您正在做的是陰影,它會引起各種混亂。 這篇文章提供了一個很好的例子,非常接近您的問題。
要解決輸出中出現"child"
的問題:調用
System.out.print(s.i + " " + s.getStr());
是不一樣的
System.out.print(s.i);
System.out.print(" ");
System.out.print(s.getStr());
在第一種情況下,程序必須先計算整個輸出字符串,然后再打印任何內容,方法是計算這三個部分並創建一個串聯的字符串。 然后將其打印出來。 它不會一次打印三個部分(第二個示例會這樣)。 因此,在計算字符串時,它將調用getStr()
,它將首先打印"child"
。 這就是為什么"child"
在輸出中出現在"1 2"
之前的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.