package com.hspedu.testsuper_;
public class Test {
public static void main(String[] args) {
// 测试
/**
* 1、创建子类对象时,父类的构造器会被调用,
* 不指定构造器时,调用无参构造器;
* 如果没有无参构造器,则需要显示指定父类构造器super(..);,或者直接super(..);指定父类构造器
*/
Cat cat = new Cat();
Cat white = new Cat("小白", 2);
System.out.println("========================================");
/**
* 2、创建子类对象可以super(..); 和 this(..);必须使用一种,不能共存且都在构造器首行
* super指定父类构造器,this指定本类构造器
*/
Cat black = new Cat("小黑");
}
}
class Animal {
private String name;
private int age;
public Animal(String name, int age) {
System.out.println("调用Animal(String name, int age)构造器.");
this.name = name;
this.age = age;
}
public Animal(String name) {
System.out.println("调用Animal(String name)构造器.");
this.name = name;
}
public Animal() {
System.out.println("调用Animal()构造器.");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Cat extends Animal {
public Cat(String name, int age) {
super(name, age); // 显示调用父类的Animal(String name, int age)构造器
System.out.println("Cat(String name, int age).");
}
public Cat() {
// 隐式调用父类的Animal()构造器,等价于 super();
System.out.println("Cat().");
}
public Cat(String name) {
this();
System.out.println("Cat(String name)调用Cat().");
}
}