我很困惑超級.i = j+1;這行代碼。我認(rèn)為它只改變了A類中的變量i,并沒有改變B類中的繼承變量i。為了使問題清楚,我添加了另一個示例(示例 2)。在示例 2 中,我們使用超級(余額,名稱);初始化從父類繼承的屬性。當(dāng)我們調(diào)用 super 并更改變量 balance 和 name 時,我們不會更改父類中的變量 balance 和 name。在示例 1 中,我們使用超級.i = j+1;我們實際上更改了父類中的變量 i,而不是從父類繼承的變量 i。這兩個樣本有什么區(qū)別?太感謝了。2019-07-18 編輯我在示例2中添加了一個diriver類。我們在CheckingAccount中創(chuàng)建一個對象c后,c中的余額為200,名稱為“XYZ”。我們在子類中使用 super(argument),我們是否更改超類中的余額和名稱?如果不是,為什么要更改樣本 1 中的變量 i?//Sample oneclass A{ int i;}class B extends A{ int j; void display() { super.i = j+1; System.out.println(j+ " "+i); }}public class CC { public static void main(String[] args) { // TODO Auto-generated method stub B obj = new B(); obj.i =1; obj.j = 2; obj.display(); }}//sample 2//parent classpublic class BankAccount { protected double balance=0; protected String name="ABC"; public BankAccount(double balance, String name) { this.balance = balance; this.name = name; }}//child classpublic class CheckingAccount extends BankAccount{ final int CHARGE = 5; final int NO_CHARGE = 0; private boolean hasInterest; public CheckingAccount(double balance, String name, boolean hasInterest) { super(balance,name); this.hasInterest = hasInterest; }}//driver classpublic class DriveClass { public static void main(String[] args) { CheckingAccount c = new CheckingAccount(200,"XYZ",true);}}輸出是2 3
2 回答

青春有我
TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊
這是iB 類中隱藏i在 A 類中的位置。 和this.i是super.i不同的。
class A {
int i;
void print() {
System.out.println("i = " + i);
}
}
class B extends A {
int j;
int i;
void display() {
i = j + 1;
super.i = 1000;
System.out.println(j + " " + i);
print(); // this will print the i in A
}
}

千萬里不及你
TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊
超級(余額,名稱)
這就調(diào)用了父類的構(gòu)造函數(shù)來初始化父類中的變量balance和name。是的,確實改變了父類中balance和name的值
超級.i = j+1
這將 j+1 分配給父類變量 i。
一種是通過構(gòu)造函數(shù)初始化父類變量,另一種是直接給父類變量賦值。兩者不同
添加回答
舉報
0/150
提交
取消