普通内部类,静态内部类代码
/**
* 普通内部类、静态内部类
*/
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 {
@Override
public void pop() {
System.out.println("innerClass3 execute");
}
}
public class InnerClass3 {
@SuppressWarnings("unused")
private Popcorn pp = new PPcorn();
@SuppressWarnings("unused")
private Popcorn popcorn = new Popcorn() {
@Override
public 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);
}
}