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

為了賬號安全,請及時綁定郵箱和手機立即綁定

super關鍵字

在父類中定義了有參構造方法,例如

public Animal(int age){

?this.age=age;

? }

?在子類中寫super();會報錯,要寫成super(age); 還要把Dog類中的age屬性加上static,為什么

正在回答

2 回答

父類Animal只有這一個有參的構造方法:

????public Animal(int age){

?????this.age=age;

? ??}

子類Dog的構造方法里必須調用這個構造方法(父類沒有無參的構造方法):

????public Dog(int age){

????????super(age);????????

????}

這里如果你寫super()會報錯,super()的意思是調用父類無參的構造方法,super(age)的意思是調用父類參數里是int XX的構造方法。前面不是說過,Animal沒有無參的構造方法,所以Dog必須去調用有參的那個,必須用super(age)。

注:這里要提醒你,一個類沒有寫構造方法時,java會給它一個默認的無參構造方法,但當你自己定義了一個有參? ? 構造方法,這個類就沒有了無參的構造方法;子類的構造方法里都必須調用父類的構造方法,當你不寫時,默認調用父類無參的構造方法,你也可以用super關鍵字去自己調用父類的構造方法。如果父類沒有無參構造方法,你當然無法去調用。


另外,Dog的age屬性要加static。沒看代碼,我不知道為什么,一般是不會這樣的。你把代碼發給我看看。


0 回復 有任何疑惑可以回復我~
#1

慕先生7094416 提問者

我在下面黏貼了兩個類,你看一下吧
2015-09-22 回復 有任何疑惑可以回復我~

? public class Animal {

? public int age=10;

? public String name;

? public void eat(){

?System.out.println("動物具有吃的能力");

? ? }

blic Animal(int age){

?this.age=age;

? }

}

--------------------------------------------------------------

public class Dog extends Animal {

? ?public int age=20;

? ?public String name;

? ?public void eat(){

? System.out.println("狗具有吃骨頭的能力");

? ?}

? ?//無參構造方法

? ?public Dog(){

? System.out.println("子類的構造方法執行了");

? ?}

? ?public void method(){

? System.out.println(age);

? eat();

? ?}


0 回復 有任何疑惑可以回復我~
#1

無動于衷

這里Dog的age屬性不用加static啊。
2015-09-23 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Java入門第二季 升級版
  • 參與學習       531145    人
  • 解答問題       6326    個

課程升級!以終為始告別枯燥,在開發和重構中體會Java面向對象編程的奧妙

進入課程

super關鍵字

我要回答 關注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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