先贴出代码 :
父类Animal ,
package parentAndChild;
public class Animal {
/**
* 动物类
*/
static{
System.out.println("父类的静态代码块");
}
{
System.out.println("执行父类的构造代码块");
}
public Animal(){
System.out.println("执行父类的构造方法");
}
public Animal(String name){
System.out.println("执行父类的构造方法 动物名称");
}
public void A(){
System.out.println("执行父类的A方法");
}
}
子类Dog
package parentAndChild;
/**
* 狗类,继承动物
*/
public class Dog extends Animal{
public static void main(String[] args) {
Dog Dog = new Dog();
Dog.A();
}
static {
System.out.println("子类的静态代码块");
}
{
System.out.println("执行子类的构造代码块");
}
public Dog(){
System.out.println("执行子类的构造方法");
}
public void A() {
System.out.println("执行子类的A方法");
}
public void B(){
System.out.println("执行子类的B方法");
}
}
执行顺序为:
父类的静态代码块
子类的静态代码块
执行父类的构造代码块
执行父类的构造方法
执行子类的构造代码块
执行子类的构造方法
执行子类的A方法
思考:
1.比较各个方法的执行顺序。
2.被子类重写的方法,只执行重写的方法,不执行父类被重写的方法。即不执行父类A方法,只执行子类A方法。
3.父类的静态代码,构造代码块,无参(带参)构造方法在子类执行时都要执行。