java实例变量可以被覆盖吗_Java继承覆盖实例变量
參見英文答案 > Java Inheritance – instance variables overriding????????????????????????????????????3個(gè)
我正在學(xué)習(xí)java.我對遺產(chǎn)有疑問.當(dāng)子類擴(kuò)展父類時(shí),父類有一個(gè)方法引用父類中聲明的實(shí)例變量.但是,子類dint會(huì)覆蓋此方法,并聲明了與父類同名的實(shí)例變量.在這種情況下,將引用來自child的實(shí)例變量或?qū)⒁胮arent.以下是代碼段
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
有人可以讓我理解為什么它引用父類的實(shí)例變量a而不是子類的a.
另一個(gè)疑問是,我理解隱藏方法,當(dāng)父類中有靜態(tài)方法時(shí),子類也聲明了具有相同簽名的靜態(tài)方法.這里隱藏的意思?什么方法被隱藏了?如果它的父方法可以請你解釋一下嗎?
提前致謝.
解決方法:
>無法在子類中重寫Java實(shí)例變量. Java繼承不起作用.
>在您的示例中,沒有隱藏(或覆蓋或重載)方法的方法.
>雖然隱藏了實(shí)例變量.在類child中,a的聲明隱藏了父級的聲明,而子類中對a的所有引用都引用了child.a而不是parent.a.
為了更清楚地說明這一點(diǎn),請嘗試運(yùn)行:
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));
}
它應(yīng)該輸出:
p1.a is 10
c1.a is 11
p1 == c1 is true
這表明有一個(gè)對象具有兩個(gè)不同的字段,稱為…,如果訪問允許,您可以獲取它們的兩個(gè)值.
最后,您應(yīng)該學(xué)會(huì)遵循標(biāo)準(zhǔn)的Java標(biāo)識符約定.類名應(yīng)始終以大寫字母開頭.
標(biāo)簽:java,oop
來源: https://codeday.me/bug/20190929/1830344.html
總結(jié)
以上是生活随笔為你收集整理的java实例变量可以被覆盖吗_Java继承覆盖实例变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中的jsonjar_java中使
- 下一篇: 管理费用属于什么科目借贷方向