package com.it.innerClass;
public class Outer1 {
private int age = 18;
public void show() {
System.out.println("outer外部类的age:"+age);
}
// 内部类,定义在外部类Outer1里面
// 非静态内部类不能有静态的方法、静态的属性、静态初始化块
public class Inner1 {
private int id = 1001;
private int age = 29;
public void test1() {
System.out.println("Inner1.test1");
System.out.println("Inner1的id:"+id);
System.out.println("Outer1的age:"+Outer1.this.age);//访问外部类的属性
Outer1.this.show();
}
}
}
package com.it.innerClass;
public class TestInnerClass1 {
public static void main(String[] args) {
// 非静态内部类的对象,必须寄存在外部类的对象里
// 先创建一个外部类对象,再用外部类对象创建内部类对象
Outer1.Inner1 i = new Outer1().new Inner1();
i.test1();
}
}
package com.it.innerClass;
import org.w3c.dom.ls.LSOutput;
/**
* 测试静态内部类
*/
public class Outer2 {
private int a = 1;
private static int b =2;
static class Inner2 {
public void test() {
// System.out.println(a);//静态内部类不可以访问外部类的非静态属性/方法
System.out.println(b);//静态内部类可以访问外部类的静态属性/方法
}
}
}
package com.it.innerClass;
/**
* 测试调用静态内部类
*/
public class TestStaticInnerClass {
public static void main(String[] args) {
// 通过new 外部类名.内部类名()的方法来创建内部类对象
Outer2.Inner2 inner2 = new Outer2.Inner2();
inner2.test();
}
}
package com.it.innerClass;
/**
* 测试匿名内部类
*/
public class TestAnonymousInnerClass {
public void testA(A3 a) {
a.run();
}
public static void main(String[] args) {
TestAnonymousInnerClass tc = new TestAnonymousInnerClass();
// 匿名内部类只使用一次
tc.testA(new A3() {
@Override
public void run() {
System.out.println("TestAnonymousInnerClass.run");
}
});
}
}
//class TestA3 implements A3 {
//
// @Override
// public void run() {
// System.out.println("TestA3.run");
// }
//}
interface A3 {
void run();
}
package com.it.innerClass;
/**
* 测试局部内部类
*/
public class TestLocalInnerClass {
public static void main(String[] args) {
new TestLocalInnerClass().show();
}
void show() {
// 局部内部类,作用域仅限于该方法
class Inner3 {
public void run() {
System.out.println("Inner3.run");
}
}
new Inner3().run();
}
}