java内部类
14:33
package oop;
//内部类
public class TestInnerClass {
public static void main(String[] args) {
//创建内部类对象
Outer. Inner inner = (new Outer()).new Inner();//这个创建方法比较重要,通过括号看懂层次
Outer.Inner inner2 = new Outer().new Inner();
inner.show();
inner2.show();
}
}
class Outer {
private int age = 10;
public void testOuter() {}
class Inner{//内部类可以直接使用外部类中的成员变量,外部类不能访问内部类的
int age = 20;
public void show() {
int age =30;
System.out.println("外部类的成员变量age" + Outer.this.age);//outer.this 表示访问到了外部变量
//Outer 是一个类名,要通过对象。成员,得通过
// 对象名来操作,而此处还未定义对象名,因此需要
// 用 this来表示当前的对象
System.out.println("内部类的成员变量age" + this.age);
System.out.println("局部变量age" + age);
}
}
}
静态内部类
package oop;
//测试静态内部类
public class TestStaticInnerClass {
public static void main(String[] args) {
Outer2.Inner2 inner = new Outer2.Inner2();//定义静态内部类,静态类对象不依托于对象的建立
}
}
class Outer2 {
static class Inner2 {
}
}
匿名内部类
package oop;
//测试匿名内部类
// 适合只需要使用一次的类
public class TestAnonymousInnerClass {
public static void main(String[] args) {
TestAnonymousInnerClass.test01(new AA() { //由于test01的入口参数是接口,不能直接new,需要实现类,
public void aa() { //此处不用实现类,可以通过匿名内部类来实现
System.out.println("hello world");
}
});
}
public static void test01(AA a) {
System.out.println("---------------------");
a.aa();
}
}
interface AA {
void aa();
}