super this 為什麼不能同時存在

2023-04-23 17:55:09 字數 1526 閱讀 7126

1樓:純淨的杯子

super和this用法相似,都有兩種用法:1. 呼叫方法 2. 呼叫構造器

呼叫方法時,super與this並不相同,this是當前物件的引用變數,但是super並不是引用變數, 它只是標識要呼叫父類的方法。因此可以將this賦值給其他變數,不能將super賦值給其他變數。這是可以理解的,因為建立一個物件時,只是建立了當前物件,並沒額外建立一個父類物件出來。

呼叫構造器時,兩者不能同時出現,否則會編譯報錯。因為兩者在使用時,必須保證呼叫他們是在第一行**處,在呼叫他們之前不能有別的**邏輯。這裡的理解是,在子類的建構函式中一定會 先呼叫父類構造器(因為子類繼承了父類的屬性,父類構造器可能對這些屬性進行了初始化工作,為了保證這些初始化工作一定被執行,所以子類一定會呼叫父類的構造器,或是隱式呼叫,或是顯式呼叫),在呼叫其它建構函式時,其他建構函式也呼叫了父類建構函式,如果允許this和super呼叫構造器可以同時存在,那麼將會造成例項化一個物件時執行兩次super,即初始化兩次父類中的變數,這是不合理的。

同樣的super呼叫建構函式要放在第一行也是為了保證父類中的初始化優先執行,this呼叫建構函式一定時,一定也會呼叫super,所以同樣因為super要放在第一行,this也必須要放在第一行。

基於這樣的邏輯super和this呼叫建構函式要放在第一行,且不能同時出現在同一個構造器中。

2樓:匿名使用者

樓主:我覺得你的問題描述的不精確。

在同一建構函式中不能同時用super()和this()既不能同時呼叫父類建構函式和子類建構函式;其實就是無論哪個建構函式中都不能有兩個建構函式執行(if else什麼的例外)。

2. 但是在同一建構函式中可以同時用super()和this.成員變數。

this()和super()不可以同時出現在同一個建構函式中

3樓:娛樂小八卦啊

this()和super()是不可以同時出現在同一個建構函式中的。

原因如下:建立一個子類的例項時,首先會呼叫父類的建構函式,然後再呼叫子類的建構函式,如果父類中沒有預設建構函式,則必須再子類的建構函式中顯示的呼叫它(如下面的例子),在程式中的順序是這樣的:

super(..父類建構函式。

..當前類建構函式語句。

同樣的道理,當一個類中有多個建構函式的時候,在其中一個建構函式中也可以先呼叫其他的建構函式來初始化物件,這種方法叫做「顯式構造方法呼叫」,當那樣的構造方法被呼叫,它將執行通常的super() 過程以及後續的操作。

然後在執行本建構函式中的構造語句,這個時候的順序是這樣的:

this(..當前類的其他建構函式。

. 當前建構函式的其他語句。

4樓:網路糾結

正確答案:a,主要是要理解this()和super(),都是說的物件,不是類本身。子類呼叫this()影響的是子類物件,且構造方法是限於其它執行的。

請參考:

為什麼this和super不能同時出現在一個建構函式里面

為什麼現在的夫妻能同甘不能同苦

當這個家庭一無所有的時候,大家心裡都是想著共同奮鬥,也許為了這個家庭的幸福,而拼搏。可能會很少把關注點放到對方身上,等到事業穩定的時候,可能都會很仔細的審視對方,會不經意的拿對方和其他人做對比。你看誰誰家老公英俊瀟灑,風趣幽默,再看身邊的老公肥頭大耳,摳腳大漢一枚。你看誰誰家老婆,身姿曼妙,溫柔端莊...

香蕉為什麼不能和地瓜同食

香蕉和地瓜能一起bai吃。主料 玉米渣du zhi150g 紅薯100g 香蕉1根 輔料 dao冰糖適量 1 玉米回 渣備好。2 把玉答米渣用清水把玉米皮洗掉。3 坐鍋燒水,水開後把玉米渣放進去煮。4 香蕉一隻紅薯一個。5 把紅薯和香蕉切成小塊。6 玉米渣煮開之後放入紅薯塊進去一起煮。7 加入冰糖煮...

柿子和酒為什麼不能同食

柿子性寒,而酒味辛微苦,性大熱有毒。酒類入胃刺激腸道分泌增多,柿中鞣酸與胃相遇,又形成稠黏狀物質,易與纖維素絞結成團,形成凝塊,既難於消化又不易排出,久之造成腸道梗阻。不宜喝柿子一起吃的其他食物 1 柿子和海帶同食,導致胃腸道不適 富含鈣離子海帶和鞣酸量多的柿子一起食用,海帶中的鈣離子可與柿子的鞣酸...