龙空技术网

Java子类创建实例时是如何加载父类的?会创建一个父类对象吗?

Python小白 1456

前言:

如今各位老铁们对“python子类与父类”都比较关心,大家都需要剖析一些“python子类与父类”的相关资讯。那么小编在网络上收集了一些对于“python子类与父类””的相关文章,希望我们能喜欢,大家一起来了解一下吧!

首先,我们写一个父类:

package com.wangyj.demo;public class Widget {public Widget(){ System.out.println("父类构造器");}public synchronized void doSomething() {}public String test() { System.out.println("父类test 方法"); return "";}}

父类

然后定义一个子类:

package com.wangyj.demo;public class LoggingWidget extends Widget {public LoggingWidget(){System.out.println("子类构造方法");}@Overridepublic synchronized void doSomething() {System.out.println(toString()+ " call doSomething"); super.doSomething();}public static void main(String[] args) { LoggingWidget widget = new LoggingWidget(); widget.doSomething();}}

子类

运行结果如下:

运行结果

分析:

我们使用jdk 自带的工具javap进行反编译。进入到.class文件所在的目录执行命令 javap -c -l -v LoggingWidget;

输出结果如下:

javap返回结果1-1

javap 返回结果图1-2

javap 返回结果图1-3

从javap 返回结果图1-3中可以看出,main方法的执行顺序 先执行的 #12 的LoggingWidget的构造器,再观察javap 返回结果图1-2的LoggingWidget的构造器中执行了#1方法,#1便是父类的init 方法;然后main方法中又执行了子类的init方法

最后 执行doSomething()方法。从而可知,创建子类的时候先调用了父类的init方法,然后调用了自身的init 方法。

结论:

子类创建时,先调用的是父类的构造器方法,然后再次调用的子类的构造器方法。只会创建一个子类对象,不会创建父类对象,但是通过调用父类的init 方法,可以加载父类的方法。

标签: #python子类与父类 #java父类如何调用子类方法