Java SE 学习笔记04 代码
普通内部类,静态内部类代码
?
- /** * 普通内部类、静态内部类 */package org.sean.module03.inner_class;/** * @author 不落的太阳(Sean Yang) */public class InnerClass1 {private String name = "outer";private static int i = 10;static {System.out.println("outer_class static block");}{System.out.println("outer_class init block");}/** 普通内部类 */public class MyInnerClass {private String name = "inner";/** * 此处的静态代码块是错误的,因为普通内部类相当于外部类中的一个属性(方法) * * 内部类中的属性和方法相当于局部变量,因此不能使用static关键字 * * static { System.out.println("inner_class static block"); } */{System.out.println("inner_class init block");}public MyInnerClass() {System.out.println("inner_class constructor");}public void method2() {System.out.println("inner_class method2");}public void test() {System.out.println(name);System.out.println(this.name);/** 调用外部类的同名属性 */System.out.println(InnerClass1.this.name);}}/** 静态内部类 */static class StaticClass {static {System.out.println("static_class static block");}{System.out.println("static_class init block");}public StaticClass() {System.out.println("static_class constructor");}public void method3() {InnerClass1.i = 40;System.out.println(InnerClass1.i);}}public InnerClass1() {System.out.println("outer_class constructor");}public void method1() {System.out.println("outer_class method1");}}
?
局部内部类
?
- /** * 局部内部类 */package org.sean.module03.inner_class;/** * @author 不落的太阳(Sean Yang) */public class InnerClass2 {private String name;public void method1(final int i) {/** 局部内部类 */class LocaleInnerClass {public void method2() {System.out.println(name);System.out.println(i);}}LocaleInnerClass innerClass = new LocaleInnerClass();innerClass.method2();}}
?
匿名内部类
?
?
- /** * 匿名内部类 */package org.sean.module03.inner_class;/** * @author 不落的太阳(Sean Yang) */class Popcorn {public void pop() {System.out.println("popcorn execute");}}class PPcorn extends Popcorn {@Overridepublic void pop() {System.out.println("innerClass3 execute");}}public class InnerClass3 {@SuppressWarnings("unused")private Popcorn pp = new PPcorn();@SuppressWarnings("unused")private Popcorn popcorn = new Popcorn() {@Overridepublic void pop() {System.out.println("innerClass3 execute");}};}
?
- /** * 匿名内部类 */package org.sean.module03.inner_class;/** * @author 不落的太阳(Sean Yang) */interface Inner {public abstract void inner();}public class InnerClass4 {public void test(Inner inner) {System.out.println("Anonymous class");}public static void main(String[] args) {InnerClass4 innerClass = new InnerClass4();innerClass.test(new Inner() {public void inner() {System.out.println("interface inner");}});}}
?
测试代码
?
- /** * 测试内部类 */package org.sean.module03.inner_class;/** * @author 不落的太阳(Sean Yang) */public class TestInner {public static void main(String[] args) {/** 普通内部类产生对象的方式 */InnerClass1.MyInnerClass innerClass1 = new InnerClass1().new MyInnerClass();innerClass1.method2();innerClass1.test();/** 静态内部类产生对象的方式 */InnerClass1.StaticClass staticClass = new InnerClass1.StaticClass();staticClass.method3();InnerClass2 innerClass2 = new InnerClass2();innerClass2.method1(10);}}
?