package Oct2016;
public class Ques1018 {
public static void main(String[] args){
Obj obj01 = new Obj("18");
Obj obj02 = new Obj("19");
obj01.printAge(obj02);
}
}
class Obj{
private String age;
public Obj(String age){ this.age = age; }
public void printAge(Obj obj){
String age = obj.age; // ① 區域變量 age
System.out.println("年齡是:" + age);
}
}
主程序輸出結果是什麼?
obj01 持有 age="18" 的對象引用obj02 持有 age="19" 的對象引用obj01.printAge(obj02)printAge,參數 obj 指向 obj02 所指對象String age = obj.age; 定義了一個區域變量 age,遮蔽 了實例變量 this.ageobj.age 訪問的是參數對象(即 obj02)的實例變量,值為 "19"age 賦值為 "19"年齡是:19
| 概念 | 說明 |
|---|---|
| Java 參數傳遞 | 基本類型傳值,引用類型傳引用的副本(均為值傳遞) |
| 變量遮蔽 | 區域變量與實例變量同名時,區域變量優先,實例變量需用 this.age 訪問 |
| 訪問權限 | 同類內方法可直接訪問 private 實例變量(如 obj.age) |
obj01 的 age(18) → 忽略參數對象是 obj02age 會讀取 this.age → 忽略遮蔽規則private 禁止跨對象訪問 → private 是類級可見,同類不同實例互訪合法// 修改點:區域變量改名
public void printAge(Obj obj){
String otherAge = obj.age;
System.out.println("年齡是:" + otherAge + ", 我自己的年齡:" + this.age);
}
// obj01.printAge(obj02) 輸出:年齡是:19, 我自己的年齡:18
每日一題,堅持精進。關注公眾號「Java每日一題」獲取更多經典面試題與核心知識點解析。