在草稿箱发现了这篇尘封已久文章,突然就想发了,好兄弟们一定要看到最后嗷…
父类
public class Fu {
static {
System.out.println("父类的静态代码块");
}
{
System.out.println("父类的构造代码块");
}
public Fu() {
System.out.println("父类的构造方法");
}
public static void methodA() {
System.out.println("父类的静态方法");
}
public void methodB() {
System.out.println("父类的普通方法");
}
}
子类
public class Zi extends Fu{
static {
System.out.println("子类的静态代码块");
}
{
System.out.println("子类的构造代码块");
}
public Zi() {
System.out.println("子类的构造方法");
}
public static void methodA() {
System.out.println("子类的静态方法");
}
public void methodB() {
System.out.println("子类的普通方法");
}
public void methodC() {
System.out.println("子类的特有方法");
}
}
测试类
public class Test {
public static void main(String[] args) {
Fu zi = new Zi();
System.out.println("---------------");
Fu.methodA();
Zi.methodA();
zi.methodA();
zi.methodB();
// zi.methodC();
((Zi) zi).methodC();
System.out.println("---------------");
new Zi();
}
}
结果分析
除了各种方法的执行顺序,从上图还引出了三个问题:
-
为什么两次
new Zi()
产生的结果不一样? -
为什么
Zi.methodA()
和zi.methodA()
产生的结果不一样? -
为什么
zi.methodC()
会出错?
身为大佬的你们怎么能放过这些问题呢,快让我在评论区看看你们的精彩分析吧,吼吼…