最近在学习java基础知识,觉得子类实例化的过程很有意思,虽然很基础,但是对初学者对子类实例化理解很有帮助,今天跟大家分享一下
继承
继承是面向对象的一个显著特征。继承是从已有类中派生出新类,新类具有继承类的数据属性和行为,并可以扩展新的能力。由此我们可以看出,继承最重要的实际意义在于,复用父类的代码,少量的类我们不能够发现其优势,当有100类且具有相同的属性与行为时,我们通过继承便能够极大的降低程序的代码量
当然我们今天讲主要内容不是继承,而是子类继承父类实例化的全过程
废话不多说,先上代码
public class SubclassTest {
public static void main(String[] args) {
Dog d = new Dog();
d.setAnimal("动物");
d.setCat("猫");
d.setDog("狗");
System.out.println("animal:"+d.getAnimal()+"cat:"+d.getCat()+"dog:"+d.getDog());
//继承父类的toString()方法
System.out.println(d.toString());
}
}
class Animal {
private String animal;
public String getAnimal() {
return animal;
}
public void setAnimal(String animal) {
this.animal = animal;
}
public Animal() {
super();
System.out.println("i am an animal");
}
}
class Cat extends Animal {
private String cat;
public String getCat() {
return cat;
}
public void setCat(String cat) {
this.cat = cat;
}
public Cat() {
super();
System.out.println("i am a cat");
}
}
class Dog extends Cat {
private String dog;
public String getDog() {
return dog;
}
public void setDog(String dog) {
this.dog = dog;
}
public Dog() {
super();
System.out.println("i am a dog");
}
}
运行结果:
i am an animal
i am a cat
i am a dog
animal:动物cat:猫dog:狗
Test.Dog@15db9742
为什么会出现这样的结果呢?
在Java中,一个类的构造方法在下面两种情况下总是会被执行:
1)创建该类的对象时(实例化)
2)创建该类的子类的对象时(子类的实例化)
子类在实例化时,会首先执行父类的构造方法,然后才执行子类的构造方法
实例化过程如图: