Java有四种内部类:
-
普通内部类
声明在类的内部:
class Outer{
int param1;
String str;
Inter inter = new Inter();
void test(){
System.out.println("I am test method of class Outer");
// 可以在外部类的方法中使用内部类,使用方法
//和正常类一样,先实例化对象后使用
Inter inter = new Inter();
inter.testInter();
}
class Inter{
int param2;
void testInter(){
System.out.println("I am test method of class Inter");
}
}
}
class Test{
public static void main(String [] args){
//如果要在外部类以外的地方使用外部类的内部类,需要先在外
//部类里创建内部类对象,然后通过外部类对象引用内部类对象
Outer outer = new Outer();
outer.inter.testInter();
}
}
- 普通内部类里面不能定义静态方法和静态成员变量
-
普通内部类可以访问外部类的所有成员变量和方法
- 方法内部的内部类
class Outer{
int param1;
String str;
Inter inter = new Inter();
void test(){
System.out.println("I am test method of class Outer");
class Inter{//方法内的内部类只能在方法内使用
int param2;
void testInter(){
System.out.println("I am test method of class Inter");
}
}
}
}
3. 静态内部类
class Outer{
int param1;
String str;
Inter inter = new Inter();
void test(){
System.out.println("I am test method of class Outer");
//外部类访问静态内部类方法或者变量,可以直接使用 内部类.方法名或变量名
Inter.testInter();
}
static class Inter{
int param2;
void testInter(){
//param1 = 1;静态内部类不能访问外部类的非静态成员变量和方法,可以访问外部类的常量。因为静态类在类加载时就已经完成初始化,final修饰的常量也是同理。而非静态变量和方法是在对象创建时才分配内存,所以静态类不能访问
System.out.println("I am test method of class Inter");
}
}
}
class Test{
public static void main(String [] args){
//如果要在外部类以外的地方使用外部类的静态内部类,
//可以直接使用Outer.Inter.变量名或方法名
Outer.Inter.testInter();
}
}
4. 匿名内部类
class Listner{
int a;
void onClick(){
System.out.println("click事件");
}
}
class Outer{
int p;
String str;
Listner lis = new Listner(){
void onClick(){
//重写父类的方法;
}
}
}