内部类
内部类
定义:内部类就是定义在一个类里面的类,里面的类可以理解为(寄生),外部类可以理解为(宿主)
特点:
内部类通常可以方便访问外部类的成员,包括私有的成员
内部类提供更好的封装性,内部类本身就可以用private,protected等修饰,封装性可以做更多控制
内部类的分类:静态内部类,成员内部类,局部内部类,匿名内部类
静态内部类
静态内部类:指被声明为static的内部类,他可以不依赖内部类而实例,而通常的内部类需要实例化外部类,从而实例化
public class Outer{
/**
* 静态内部类
*/
public static class Inner{
}
}
静态内部类创建对象的格式:
外部类名.内部类名 对象名=new 外部类名.内部类构造器()
Outer.Inner in=new Outer.Inner();
注意:
1.静态内部类不可以有与外部类有相同的类名。
2.不能访问外部类的普通成员变量,但是可以访问静态成员变量和静态方法(包括私有类型)
3.一个静态内部类去掉static 就是成员内部类
成员内部类
成员内部类:无static修饰,属于外部类的对象,可以直接访问外部类的静态成员,实例方法中可以直接访问外部类的实例成员
public class Outer{
//成员内部类
public class Inner{
}
}
成员内部类创建对象的格式:
外部类名.内部类名 对象名=new 外部类构造器.new 内部类构造器()
Outer.Inner in=new Outer().new Inner();
注意:
在成员内部类中访问所在外部类对象,格式:外部类名.this
局部内部类
局部内部类:局部内部类放在方法,代码块,构造器等执行体中,局部内部类的文件名为:外部类$N内部类.class
匿名内部类(重点)
匿名内部类:本质上是一个没有名字的局部内部类,定义在方法中,代码块中等
作用
方便创建子类对象,最终目的为了简化代码编写
格式
new 类|抽象类|或者接口名(){
重写方法;
};
特点
1.匿名内部类是一个没有名字的内部类
2.匿名内部类写出来就会产生一个匿名内部类的对象
3.匿名内部类的对象类型相当于当前new的那个的类型的子类型
4.匿名内部类可以作为方法的实际参数进行传输
实例
public class Test2 {
/**
* 匿名内部类可以作为方法的实际参数进行传输
* */
public static void main(String [] args){
go(new Swimming(){
@Override
public void swim() {
System.out.println("自由Swimming~~");
}
});
}
public static void go(Swimming s){
System.out.println("开始~~");
s.swim();
System.out.println("结束~~~");
}
}
interface Swimming{
void swim();
}