今天,初学java不是很久,遇到了父类子类的继承关系的问题。看着视频,内心一万个草泥马,这怎么不是我想的这样啊。于是结合视频老师的教导和自己网上查找资料,最后终于搞懂了java继承的问题。为表达心中的欣喜之情,特别写出来与大家分享。

先跟大家分享一下实例化的过程:

Person p = new Person();

1,JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下).
2,在堆内存中开辟空间,分配地址。
3,并在对象空间中,对对象中的属性进行默认初始化。
4,调用对应的构造函数进行初始化。
5,在构造函数中,第一行会先调用父类中构造函数进行初始化。
6,父类初始化完毕后,再对子类的属性进行显示初始化。--这句很关键。
7,进行子类构造函数的特定初始化。
8,初始化完毕后,将地址值赋值给引用变量Person p.



class Fu

{

    Fu()

    {

        

        show();  //通过结果可以看出,子父类有同名show方法,调用的是子类show方法(这个是就近原则)。

        return;

    }


    void show()

    {

        System.out.println("fu show");

    }

}

class Zi extends Fu

{

    int num = 8;

    Zi()

    {

        super();

        //-->通过super初始化父类内容时,子类的成员变量并未显示初始化。等super()父类初始化完毕后,

        //才进行子类的成员变量显示初始化。


        System.out.println("zi cons run...."+num);

        return;

    }

    void show() 

    {

        System.out.println("zi show..."+num);

    }

}

class ExtendsDemo5 

{

    public static void main(String[] args) 

    {

        Zi z = new Zi(); 

        z.show();

    }

}


因此最后打印的结果是如下这样的:

zi show...0
zi cons run....8
zi show...8

相信大家把实例化的过程搞懂了之后,以后就不会再次出现错误了。

一起加油。!!!!