子类可以调用本类的有参构造
父类的构造方法不能调用
要用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); }
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()); } }
|
📌 原因:
- set/get 是普通方法
- 构造方法 ≠ 普通方法