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

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

如下所示,有個問題不是很理解,關于super和this關鍵字的使用?

如下所示,有個問題不是很理解,關于super和this關鍵字的使用?

慕雪6442864 2021-05-17 18:10:22
調試并實現利用super關鍵字重寫方法。源文件1: Employee.java public class Employee {public String name = "zhangSan";public double salary = 5000;public String getDetails() {return " Name:" + name + "\n" + " Salary:" + salary;}}源文件2: Manager.javapublic class Manager extends Employee {pubilc String department = "Office";public String getDetails() {return " Name:" + name + "\n" + " Salary:" + salary + "\n" + " Department: " + department;}}源文件3: TestEx203a.java public class TestEx203a{public static void main(String args[ ]) {Employee e = new Employee();Manager m = new Manager();System.out.println("Employee:"+"\n" +e.getDetails());System.out.println("Manager:"+"\n" +m.getDetails());}}
查看完整描述

2 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您好,第一、在子類構造方法中要調用父類的構造方法,用“super(參數列表)”的方式調用,參數不是必須的。同時還要注意的一點是:“super(參數列表)”這條語句只能用在子類構造方法體中的第一行。
第二、當子類方法中的局部變量或者子類的成員變量與父類成員變量同名時,也就是子類局部變量覆蓋父類成員變量時,用“super.成員變量名”來引用父類成員變量。當然,如果父類的成員變量沒有被覆蓋,也可以用“super.成員變量名”來引用父類成員變量,不過這是不必要的。
第三、當子類的成員方法覆蓋了父類的成員方法時,也就是子類和父類有完全相同的方法定義(但方法體可以不同),此時,用“super.方法名(參數列表)”的方式訪問父類的方法。
package org.leizhimin;
public class Father {
public String v="Father";
public String x="輸出了Father類的public成員變量x!!!";

public Father() {
System.out.println("Father構造方法被調用!");
}

public Father(String v){
this.v="Father類的帶參數構造方法!運行了.";
}
public void outinfo(){
System.out.println("Father的outinfo方法被調用");
}
public static void main(String[] args) {
// TODO 自動生成方法存根
}
}

package org.leizhimin;
public class Son extends Father{
public String v="Son";

public Son() {
super(); //調用超類的構造方法,只能放到第一行.
System.out.println("Son無參數構造方法被調用!");
//super(); //錯誤的,必須放到構造方法體的最前面.
}

public Son(String str){
super(str);
System.out.println("Son帶參數構造方法被調用!");
}
//覆蓋了超類成員方法outinfo()
public void outinfo(){
System.out.println("Son的outinfo()方法被調用");
}

public void test(){

String v="哈哈哈哈!"; //局部變量v覆蓋了成員變量v和超類變量v

System.out.println("------1-----");
System.out.println(v); //輸出局部變量v
System.out.println(this.v); //輸出(子類)成員變量v
System.out.println(super.v); //輸出超類成員變量v

System.out.println("------2-----");
System.out.println(x); //輸出超類成員變量v,子類繼承而來
System.out.println(super.x); //輸出超類成員變量v

System.out.println("------3-----");
outinfo(); //調用子類的outinfo()方法
this.outinfo(); //調用子類的outinfo()方法
super.outinfo(); //調用父類的outinfo()方法
}

public static void main(String[] args) {
new Son().test();

}
}

子類Son運行結果:

Father構造方法被調用!
Son無參數構造方法被調用!
------1-----
哈哈哈哈!
Son
Father
------2-----
輸出了Father類的public成員變量x!!!
輸出了Father類的public成員變量x!!!
------3-----
Son的outinfo()方法被調用
Son的outinfo()方法被調用
Father的outinfo方法被調用


查看完整回答
反對 回復 2021-05-23
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

1.
main 因為是static靜態的,不能指示新創建的類和父類
this(有參數/無參數) 用于調用本類相應的構造函數
super(有參數/無參數) 用于調用父類相應的構造函數
this. 后跟方法或屬性 指示本類的方法或屬性
super. 后跟方法或屬性(父類中指明的public protected)

2.
調用父類方法改變此變量就只能改變父類里面的此變量,而不能改變子類里面的變量,為什么呢?

調用父類的方法改變的變量只能是父類的變量這是必然的,因為父類中不存在子類新加的變量,因此只能改變父類中的變量

查看完整回答
反對 回復 2021-05-23
  • 2 回答
  • 0 關注
  • 346 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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