内部类

内部类

定义:内部类就是定义在一个类里面的类,里面的类可以理解为(寄生),外部类可以理解为(宿主)

特点

内部类通常可以方便访问外部类的成员,包括私有的成员
内部类提供更好的封装性,内部类本身就可以用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();
}
posted @ 2022-06-25 15:22  小冷漠  阅读(46)  评论(0编辑  收藏  举报