子类实例化前父类会实例化?所以抽象类能被实例化?
实例化的定义:实例化一个对象,其实就是在内存中开放一个空间,用于存储新的产物。(来自百度百科)
如果是这么个定义的话,抽象类里除了有抽象方法外,可以有属性和实现方法,而且其子类能对抽象父类的属性和非抽象方法进行调用。那么就是说,抽象父类在内存中也是有一定空间的,只是不能new罢了?
------解决方案--------------------楼主的理解完全正确.在java中所有类的父类都是Object。在所有类进行初始化的时候都会调用Object的初始化方法,注意初始化方法并不是构造方法,初始化完成后就在内存中存在(这个过程就是类加载过程)。抽象类也一样有初始化方法。只不过我们在进行类实例化的时候比如通过new 关键字产生实例,java语言不允许抽象类有实例产生,所以抽象类不能被实例化。
------解决方案--------------------分清楚类的实例化与对象的实例化,多态的核心机制哦
------解决方案--------------------
你要把实例化和初始化分辨开来,父类初始化并不是又创建一个父类的对象,而是把父类中定义的对象相关的属性都初始化,因为这些属性子类对象也是拥有的。
所以为了保证子类对象的完整性,要从最底层的父类开始,逐级初始化,所有初始化都完成后才会生成一个完整的子类对象。
------解决方案--------------------不能直接实例化。。
子类实例化的时候会先从继承树的顶端开始实例化,
这么说明白了么
------解决方案--------------------虚拟机能干的事,你不能干;
代码中不能显式实例化抽象类。