复习java内部类

 

 

内部类定义:是定义在另一个类中的类。

内部类的作用:

  • 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
  • 内部类可以对同一个包中的其他类隐藏起来。
  • 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

内部类点滴:

  • 只有内部类可以是私有类,而常规类只能具有包可见性或者公有可见性。
  • 内部类对象拥有一个对外围类对象的隐式引用,这个引用是通过内部类构造器传递过来的,编译器会对这个构造器进行修改,以便添加一个外围类的引用参数。(注:这是一个编译器行为)
  • 内部类的特殊语法规则。OutClass.this引用外部类对象,OuterObject.new InnerClass(args)创建内部类
  • 内部类的内部
  • 局部内部类。不能用public或者private访问控制符进行声明,引用的局部变量是final的。(想想为什么是final的?因为内部类会备份一份final的局部变量,是为了直到他执行的时候变量的值没有发生变化)
  • 静态内部类。使用内部类是为了把一个类隐藏在另一个类的内部,并不需要内部类的引用外围类对象。为此,可以将内部类声明为static,以便取消引用,当然只有内部类可以声明为static,静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他的所有内部类完全一样。
public class CheckBox {
	private boolean checked;
	
	//这个内部类是包可见性,只有包含它的外围类和它所在的包中的其他类能访问到它,当然子类也可以访问的到
	class OnClickListener{
		//虽然是public,由于类本身是包访问权限,所以受限于包权限
		public void itemClick(){
			System.out.println("我被点击了");
		}
	}
	
	//不写操作修饰符,默认的是default,包访问权限
	boolean isChecked(){
		return checked;
	}
	
	//这个内部类是完全公开的,可以被外部其他包的类访问
	public class onDoubleClickListener{
		//可以被访问的到
		public void itemClick(){
			System.out.println("我被双击了");
		}
	}
	
	//只可以被外围类访问的到
	private class onMouseOverListener{
		//受限于类本上是private,所以只有外围类能访问的到
		public void itemOver(){
			System.out.println("鼠标飘过去了");
		}
	}
}

 



 

你可能感兴趣的:(java)