基本概念
一个类定义在另外一个类的内部,那么该类就称作为内部类。
内部类的类别
成员内部类
局部内部类
匿名内部类
//外部类
class Outer{
//成员变量
int x = 100;
//成员内部类
class Inner{
}
//成员函数
public void test(){
//局部变量
int y =100;
//局部内部类
class Inner{
}
}
}
成员内部类
访问方式:
方式一:在外部类提供一个方法创建内部类的对象进行访问。
方式二:在其他类直接创建内部类的对象。
格式:外部类.内部类 变量名 = new 外部类().new 内部类();
注意: 如果是一个静态内部类,那么在其他类创建 的格式:
外部类.内部类 变量名 = new 外部类.内部类();
成员内部类的好处
内部类可以直接访问外部类的所有成员
应用场景
在描述A事物时,发现A事物内部还有一个比较复杂的B事物,而且B事物还要访问A事物的属性等数据,此时就可使用 内部类描述B事物。
注意的细节
1. 外部类与内部类存在同名成员时,在内部类中默认访问内部类的成员(就近原则)。 可以通过“外部类.this.成员变量名”指定访问外部类的成员。
2. 私有的成员内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能在其他类创建对象了。
3. 成员内部类一旦出现了静态成员,那么该类也必须使用static修饰。
局部内部类
在一个类的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。
注意的细节
如果局部内部类访问了一个局部变量,那么该局部变量必须使用final修饰。
匿名内部类
没有类名的类就称作为匿名内部类
使用前提
必须存在继承或者实现关系才能使用
匿名内部类的好处
简化书写。
interface Opt{
public void opt1();
}
class Demo
{
public static void main(String[] args)
{
test(new Opt(){
public void opt1(){
//实现代码。。。
}
});
}
public static void test(Opt o){
o.opt1();
}
}