内部类
内部类有两种情况:
(1) 在类中定义一个类(私有内部类,静态内部类)
(2) 在方法中定义一个类(局部内部类,匿名内部类)
私有内部类 —— 在方法之间定义的内部类,非静态
(1) 在外部类的作用范围内可以任意创建内部类对象,即使内部类是私有的(私有内部类)。即内部类对包围它的外部类可见。
Java代码
//代码1:内部类对外部类可见
class Outer{
//创建私有内部类对象
public Inner in=new Inner();
//私有内部类
private class Inner{
...
}
}
(2) 在内部类中可以访问其外部类的所有域,即使是私有域。即外部类对内部类可见。
Java代码
//代码2:外部类对内部类可见
class Outer{
//外部类私有数据域
private int data=0;
//内部类
class Inner{
void print(){
//内部类访问外部私有数据域
System.out.println(data);
}
}
}
静态内部类 —— 在方法间定义的内部类,静态
内部类也有静态的区别,这就是静态内部类
Java代码
package hr.test;
//代码3:静态内部类对外部变量的引用
public class Outer{
private static int i=0;
//创建静态内部类对象
public Inner in=new Inner();
//静态
private static class Inner{
public void print(){
System.out.println(i); //如果i不是静态变量,这里将无法通过编译。
}
}
}
静态内部类和私有内部类最大的区别在于,静态内部类中无法引用到其外围类的非静态成员。
局部内部类 —— 在方法中定义的内部类
方法内部类也有两个特点
(1) 方法中的内部类没有访问修饰符, 即方法内部类对包围它的方法之外的任何东西都不可见。
(2) 方法内部类只能够访问该方法中的局部变量,所以也叫局部内部类。而且这些局部变量一定要是final修饰的常量。
Java代码
class Outter{
public void outMethod(){
final int beep=0;
class Inner{
//使用beep
}
Inner in=new Inner();
}
}
内部类的特点总结
在方法间定义的非静态内部类:
内部类中不能定义静态成员变量。
外围类和内部类可互相访问自己的私有成员。
在方法间定义的静态内部类:
只能访问外部类的静态成员。
在方法中定义的局部内部类
该内部类没有任何的访问控制权限
外围类看不见方法中的局部内部类的,但是局部内部类可以访问外围类的任何成员。
方法体中可以访问局部内部类,但是访问语句必须在定义局部内部类之后。
局部内部类只能访问方法体中的常量,即用final修饰的成员。
在方法中定义的匿名内部类:
没有构造器,取而代之的是将构造器参数传递给超类构造器。