非静态内部类
package cn.aynortechnology.oop;
/*
* 测试非晶态内部类
*/
public class TestInnerclass {
public static void main(String[] args) {
//创建内部类对象
Outer.Inner inner = new Outer().new Inner(); //创建内部类对象的时候必须要先创建外部类对象
inner.show();
}
}
class Outer{
private int age = 10;
class Inner{ //虽然Inner在Outer里面,也是生成两个class文件
int age = 20;
//非静态内部类不能有静态方法
public void show(){
int age = 30;
System.out.println("外部类的成员变量age:"+Outer.this.age);//非晶态内部类可以访问外部类对象,但是外部类不能直接访问非静态内部类成员
System.out.println("内部类的成员变量age:"+this.age);
System.out.println("方法本身的局部变量age:"+age);
}
}
}
静态内部类
package cn.aynortechnology.oop;
/*
* 测试静态内部类
*/
public class TestStaticInnerClass {
public static void main(String[] args) {
Outer2.Inner2 inner2 = new Outer2.Inner2();
}
}
class Outer2{
static class Inner2{
}
}
匿名内部类(Android中经常用到)
package cn.aynortechnology.oop;
/*
* 测试匿名内部类
*/
public class TestAnomymousInnerClass {
public static void test01(A a) {
a.aa();
}
public static void main(String[] args) {
TestAnomymousInnerClass.test01(new A(){ //匿名内部类
public void aa(){
System.out.println("TestAnomymousInnerClass.main(...).新建 A() {...}.aa()");
}
});
}
}
interface A{
void aa();
}