继承条件下的构造方法:
子类构造方法创建对象时,没有通过super显示调用父类有参构造,也没有通过this显式调用自身其他构造方法时,默认调用父类无参构造方法。
子类构造方法通过super显示调用父类有参构造方法时,执行父类相应的构造方法,而不执行父类的无参构造。
子类调用自身其他构造方法时遵循以上两条。
示例:
class Pet { //父类Pet
private String name;//父类私有属性
private int age;
public Pet() {//父类无参构造
}
public Pet(String name, int age) {//父类有参构造
this.name = name;
this.age = age;
}
void showInfo(){ //父类中的方法,显示宠物名字和年龄
System.out.println("宠物名字是"+name+"年龄是"+age);
}
}
class Dog extends Pet{ //Dog类继承Pet类
String strain; //扩展自己的属性
public Dog() {
}
public Dog(String name, int age,String strain) {
super(name,age); //super调用父类有参构造
this.strain = strain;
}
void showDog(){
super.showInfo();//super调用父类中的方法
System.out.println("宠物是一狗狗,品种是"+strain);
}
}
class Cat extends Pet{
String sex;
public Cat() {
}
public Cat(String sex) {//没有显示调用父类有参构造,将默认调用父类无参构造
this.sex = sex;
}
//重写了父类中的同名方法,而没有用super调用父类中的同名方法,父类中的方法就被覆盖了
void showInfo(){
System.out.println("我是一只小猫");
}
}
class Tests{
public static void main(String[] args) {
//狗狗并没有继承Pet的name和age属性,而是通过父类public的构造方法间接访问
Dog dog = new Dog("旺财",3,"哈士奇");
Cat cat = new Cat("公");
dog.showInfo();
System.out.println("*********");
dog.showDog();
System.out.println("*********");
cat.showInfo();
}
}
以上代码将输出:
宠物名字是旺财年龄是3
*********
宠物名字是旺财年龄是3
宠物是一狗狗,品种是哈士奇
*********
我是一只小猫 |