普通内部类,静态内部类代码
- /**
- * 普通内部类、静态内部类
- */
- 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 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)
*/
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)
*/
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)
*/
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);
- }
- }
/**
* 测试内部类
*/
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);
}
}