當區域變數(參數)與成員變數同名時,this 明確指向成員變數:
public class Demo {
public String name;
public int age;
public Demo(String name, int age) {
this.name = name; // this.name = 成員變數, name = 參數
this.age = age;
}
public void say() {
System.out.println("名字:" + name + ",年齡:" + age); // 此處 this 可省略
}
}
必須置於建構子第一行,一個建構子只能呼叫一個其他建構子:
public Demo() {
this("預設名", 0); // 呼叫帶參建構子
}
public Demo(String name, int age) {
this.name = name;
this.age = age;
}
class A {
public A() { new B(this).print(); } // 匿名物件傳遞 this
public void print() { System.out.println("Hello from A!"); }
}
class B {
A a;
public B(A a) { this.a = a; }
public void print() { a.print(); System.out.println("Hello from B!"); }
}
final 方法不可重載,static 方法不可重載但可重新宣告public class Demo {
void test() { System.out.println("無參數"); }
void test(int a) { System.out.println("int: " + a); }
void test(int a, int b) { System.out.println("兩參數: " + a + ", " + b); }
double test(double a) { System.out.println("double: " + a); return a * a; }
public static void main(String[] args) {
Demo obj = new Demo();
obj.test();
obj.test(2);
obj.test(2, 3);
obj.test(2.0); // 匹配 double 版本
}
}
編譯器根據呼叫時的實際參數類型、個數、順序進行逐一匹配(靜態綁定),匹配失敗則編譯錯誤。這就是「重載解析」。