亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下代碼中,求問為什么輸出的結果是0,40,15,求高手解答?

如下代碼中,求問為什么輸出的結果是0,40,15,求高手解答?

aluckdog 2022-04-15 15:11:59
class A{int m=0,n=0;long f(){return m+n;}}class B extends A{int m=1,n=1;long f(){long result=0;super.m=10;super.n=20;result=super.f()+(m+n);return result;}long g(){long result=0;result=super.f();return result/2;}}public class Example5_7{public static void main(String args[]){B b=new B();b.m=3;b.n=7;long resultOne=b.g();long resultTwo=b.f();long resultThree=b.g();System.out.println("resultOne="+resultOne);System.out.println("resultTwo="+resultTwo);System.out.println("resultThree="+resultThree);}}為什么輸出的結果是0,40,15 求高手解答
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

要說super就先要說this。
"this",作為一個特殊的關鍵字,它的規則如下:
1??梢员硎緲嬙旌瘮祩鬟f。this(a,b)表示調用另外一個構造函數。這里面的this就是一個特殊語法,不是變量,沒有什么類型。
2。可以在一個類的非static成員內部使用,表示當前這個對象。此時,this就是一個final的普通變量,它有靜態類型,就是這個類C本身;它有動態類型,就是當前這個對象的類型。你可以對它調用成員函數,把它傳遞給別的函數,等等等等。只要一個C類型的final變量可以出現的地方,它就可以出現。

"super"。它和"this"類似,但是也有不同的地方。
1。表示調用父類的構造函數。也是一個特殊語法,不是變量,沒有什么類型。

2??梢栽谝粋€類的非static成員內部使用。比如super.method()。
但是,注意,這個super.method()只是長得跟some_var.method()一樣,一個語法糖而已。實質上,"super"根本不是一個變量。

為什么不是?因為如果是就壞了。java里面有一個金科玉律:任何public非static函數的調用都是多態的。
所以,如果super是個變量,也指向當前對象,那么,不管super的靜態類型是什么super.method()必然調用的是子類的那個版本,而不會是我們期望的,靜態地選擇父類的那個版本。

所以,你只要把super.xxx看成一個特殊的語法,比如理解為“super::xxx”就好了。

既然super不是一個變量,那么不能把它象一個普通變量那樣"==",或者傳遞給某個函數就看起來很正常了,是么?何況,你其實也用不著它,有this你這些要求就都可以辦到了。

3。super的另外一個作用是調用父類的protected函數。只有通過"super"這個魔咒,我們才能操作父類的protected成員,別無它法。



查看完整回答
反對 回復 2022-04-19
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

先回答你題目的問題,super的作用。
super出現在繼承了父類的子類中。有三種存在方式:
第一種
super.xxx;(xxx為變量名或對象名)
這種方法意義為,獲取父類中的名字為xxx的變量或方法引用。
使用這種方法可以直接訪問父類中的變量或對象,進行修改賦值等操作
第二種
super.xxx();(xxx為方法名)
這種方法意義為,直接訪問并調用父類中的方法。
第三種
super();
這種方法意義為,調用父類的初始化方法,其實就是調用父類中的public xxx()方法



查看完整回答
反對 回復 2022-04-19
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

super出現在繼承了父類的子類中。有三種存在方式:
第一種
super.xxx;(xxx為變量名或對象名)
這種方法意義為,獲取父類中的名字為xxx的變量或方法引用。使用這種方法可以直接訪問父類中的變量或對象,進行修改賦值等操作。
第二種
super.xxx();(xxx為方法名)
這種方法意義為,直接訪問并調用父類中的方法。
第三種
super();
這種方法意義為,調用父類的初始化方法,其實就是調用父類中的public xxx()方法。



查看完整回答
反對 回復 2022-04-19
  • 3 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號