JAVA中继承与初始化顺序
来源:互联网 发布:斩赤红之瞳黑瞳cos淘宝 编辑:程序博客网 时间:2024/04/29 19:38
我们都知道继承是JAVA三大特性之一,但很多同学都对继承初始化顺序搞不明白,那么今天我们通过一个粟子来讨论下。
先建一个基类(父类)Inserct
class Inserct {private int i=9;protected int j;Inserct(){System.out.println("i="+i+",j="+j);j=39;}private static int x1=printInit("static Insect.x1 inittalized");static int printInit(String s){System.out.println(s);return 47;}}再写一个子类 Beetle
public class Beetle extends Inserct {private int k= printInit("Beetle.k initialied");public Beetle(){System.out.println("k="+k);System.out.println("j="+j);}private static int x2=printInit("static Beetle.x2 initialized");public static void main(String[] args) {System.out.println("==============main==================;);Beetle beetle = new Beetle();}}
运行结果:
static Insect.x1 inittalizedstatic Beetle.x2 initialized
==============main==================
i=9,j=0
Beetle.k initialied
k=47
j=39
看到这里就有同学提问了:
子类中
private int k= printInit("Beetle.k initialied");在Beetle构造函数之前运行会不会是位置在构造函数之前造成的呢?
当然,答案是“NO"
我们可以把它们调换下位置
public Beetle(){System.out.println("k="+k);System.out.println("j="+j);}private int k= printInit("Beetle.k initialied");
运行结果依然是:
static Insect.x1 inittalizedstatic Beetle.x2 initialized
==============main==================
i=9,j=0
Beetle.k initialied
k=47
j=39
此时我们可以由结果看出初始化顺序为:
1:基类静态代码块
2:子类静态代码块
3:基类非静态属性
4:基类构造函数
5:子类非静态属性
6:子类构造函数
以上顺序如果没有就跳过
阅读全文
0 0
- JAVA中继承与初始化顺序
- java中继承初始化顺序
- JAVA中继承时的初始化顺序
- java继承中初始化的顺序
- Java中类继承的初始化顺序
- java中继承的初始化顺序
- 继承中初始化顺序
- java继承 初始化顺序
- java继承初始化顺序
- Java中继承与初始化
- 继承中类初始化顺序
- java 继承 及 初始化顺序
- 【转载】java继承 初始化顺序
- Java继承和初始化顺序
- Java中的继承初始化顺序
- Java:继承的初始化顺序
- [5v]Java继承中父类与子类的初始化顺序
- Java继承中父类与子类的初始化顺序
- C语言从键盘输入一个十进制数将其转换为任意进制数输出
- 程序员必读:代码重构和交接的真谛
- Java应用——高仿Windows XP画板(一)
- CNN卷积神经网络
- 打印半边菱形
- JAVA中继承与初始化顺序
- Maven项目引入JS,css等文件的问题
- linux 中特殊符号用法
- suse11下关闭防火墙
- 使用Callable和Future创建线程
- Android如何使用已调用多个Activity的Application
- 单源最短路径问题--Dijkstra
- Error:Execution failed for task ':app:javaPreCompileDebug'. > Annotation processors must be explicit
- AttributeError: /usr/lib/x86_64-Linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup