public class MyTest5 { /* 详情:http://blog.csdn.net/wzq6578702/article/details/79382182 */ public static void main(String[] args) { System.out.println(MyChild5.b); } }
interface MyParent5{ public static final int a =4; public static Thread thread = new Thread(){ //代码块 当Thread的匿名类初始化的时候 代码块会被执行(每new一个类代码块都会执行一次) { System.out.println("MyParent5 invoked!"); } }; }
class MyChild5 implements MyParent5{ public static int b = 5; }
输出:
1
5
如果我们把MyParent5和MyChild5都改为Class呢? 答案是输出:
1 2
MyParent5 invoked! 5
因为子类的初始化会想初始化父类 然后我们如果把MyChild5的b改为【public static final int b = 5;】这样运行结果是什么呢? 答案是:
public class MyTest5 { /* 详情:http://blog.csdn.net/wzq6578702/article/details/79382182 当一个接口初始化时并不要求其父接口完成了初始化 只有在真正用到父接口的时候(如引用接口中定义的常量时),才会初始化。 */ public static void main(String[] args) { System.out.println(MyChild5.b); } }
interface Grandapa{ public static Thread thread = new Thread(){ //代码块 当Thread的匿名类初始化的时候 代码块会被执行(每new一个类代码块都会执行一次) { System.out.println("Grandapa invoked!"); } }; }
interface MyParent5 extends Grandapa{ public static final int a =4; public static Thread thread = new Thread(){ //代码块 当Thread的匿名类初始化的时候 代码块会被执行(每new一个类代码块都会执行一次) { System.out.println("MyParent5 invoked!"); } }; }
class MyChild5 implements MyParent5{ public static int b = 5; }
public class MyTest5 { public static void main(String[] args) { System.out.println(MyChild5.b); } }
class Grandapa{ public static Thread thread = new Thread(){ //代码块 当Thread的匿名类初始化的时候 代码块会被执行(每new一个类代码块都会执行一次) { System.out.println("Grandapa invoked!"); } }; }
class MyParent5 extends Grandapa{ public static final int a =4; public static Thread thread = new Thread(){ //代码块 当Thread的匿名类初始化的时候 代码块会被执行(每new一个类代码块都会执行一次) { System.out.println("MyParent5 invoked!"); } }; }
class MyChild5 extends MyParent5{ public static int b = 5; }