java实例变量可以被覆盖吗_Java继承覆盖实例变量
參見英文答案 > Java Inheritance – instance variables overriding????????????????????????????????????3個
我正在學習java.我對遺產有疑問.當子類擴展父類時,父類有一個方法引用父類中聲明的實例變量.但是,子類dint會覆蓋此方法,并聲明了與父類同名的實例變量.在這種情況下,將引用來自child的實例變量或將引用parent.以下是代碼段
class parent {
int a;
parent() {
System.out.println("in parent");
a = 10;
}
void method() {
System.out.println(a);
}
}
class child extends parent {
int a;
child() {
System.out.println("in child");
a = 11;
}
}
public class Test {
public static void main(String args[]) throws IOException {
parent p1 = new child();
p1.method();
}
}
我得到的輸出是
在父母
在孩子
10
有人可以讓我理解為什么它引用父類的實例變量a而不是子類的a.
另一個疑問是,我理解隱藏方法,當父類中有靜態方法時,子類也聲明了具有相同簽名的靜態方法.這里隱藏的意思?什么方法被隱藏了?如果它的父方法可以請你解釋一下嗎?
提前致謝.
解決方法:
>無法在子類中重寫Java實例變量. Java繼承不起作用.
>在您的示例中,沒有隱藏(或覆蓋或重載)方法的方法.
>雖然隱藏了實例變量.在類child中,a的聲明隱藏了父級的聲明,而子類中對a的所有引用都引用了child.a而不是parent.a.
為了更清楚地說明這一點,請嘗試運行:
public static void main(String args[]) throws IOException {
child c1 = new child();
parent p1 = c1;
System.out.println("p1.a is " + p1.a);
System.out.println("c1.a is " + c1.a);
System.out.println("p1 == c1 is " + (p1 == c1));
}
它應該輸出:
p1.a is 10
c1.a is 11
p1 == c1 is true
這表明有一個對象具有兩個不同的字段,稱為…,如果訪問允許,您可以獲取它們的兩個值.
最后,您應該學會遵循標準的Java標識符約定.類名應始終以大寫字母開頭.
標簽:java,oop
來源: https://codeday.me/bug/20190929/1830344.html
總結
以上是生活随笔為你收集整理的java实例变量可以被覆盖吗_Java继承覆盖实例变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中的jsonjar_java中使
- 下一篇: java基础不好框架能学会吗_转行Jav