子类可以调用本类的有参构造
父类的构造方法不能调用
要用super();
set和get方法不属于构造方法,可以调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Student {
String name;
int age;

// 无参构造
public Student() {
this("Tom", 18); // 调用本类的有参构造
}

// 有参构造
public Student(String name, int age) {
this.name = name;
this.age = age;
}

}

👉 这里就是:子类还没出现,先说明“本类构造可以调本类构造”

示例:父类 + 子类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Father {
int money;

public Father(int money) {
this.money = money;
System.out.println("Father constructor");
}
}

class Son extends Father {

public Son() {
super(1000); // 调用父类的有参构造
System.out.println("Son constructor");
}
}
public class Test {
public static void main(String[] args) {
new Son();
}
}

📌 执行顺序:

1
2
Father constructor
Son constructor

👉 父类构造一定先执行

示例:构造方法中调用 set/get

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Person {
private String name;

public Person(String name) {
setName(name); // ✔ 调用 set 方法
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person("Alice");
System.out.println(p.getName()); // Alice
}
}

📌 原因:

  • set/get 是普通方法
  • 构造方法 ≠ 普通方法