1、内部类定义在成员变量位置上:可以直接访问外部类成员;可以被private和static 修饰;被static修饰的内部类只能访问外部类中的静态成员。
2、内部类定义在局部位置:也可以直接访问外部类成员;不可以被private和static 修饰;可以访问局部中的局部变量,但必须是被final修饰的。
package com.mashen.inner;
class TestInner {
private String name ;
private static int age;
static class Haha{ //定义在成员变量位置
public void test() {
age = 11;
System.out.println(age);
}
}
public void hehe(){
class Haha{ //定义在局部变量位置
public void test() {
name = "aaa";
System.out.println(name);
}
}
}
}
3、匿名内部类:必须实现或继承一个类或者借口。简单来说,就是建立一个带内容的外部类或接口的子类的匿名对象。
package com.mashen.inner;
/**
*
* 定义一个A抽象类
*
*/
public abstract class A {
public abstract void test();
}
package com.mashen.inner;
public class AnonymousClass {
String name;
public void test1(){
/**
* 匿名内部类
* 必须有继承或实现
*/
new A(){
@Override
public void test() {
name = "bbb";
}
}.test();
}
}