再谈Java

内部类
内部类是定义在另一个中的类,内部类的作用:
1.内部类可以访问该类定义所在的作用域中的数据,包括私有数据
2.内部类可以对同一个包中的其他类隐藏起来
3.当想定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷
使用内部类访问对象的状态
一个方法可以引用调用这个方法的对象数据域。内部类既可以访问自身内部的数据域,也可以访问创建它的外围类对象的数据域。为了运行这个程序,内部类的对象总有一个隐式引用,它指向了创建它的外部类对象。
内部类的特殊语法
正规语法OuterClass.this表示外围类引用。
例如:

public void actionPerformed(ActionEvent vvent)
{
	if(Talking.this.been)
	{
		....
	}
}

可以利用outerObject.new.InnerClass(construction parameters)
例如

ActionListener listener=this.new.TimerPrinter;

这里将外围类引用设置为创建内部类对象方法中this引用。
可以通过显示的命名将外围类引用是设置为其他的对象,如果TimerRrinter是一个共有内部类,对于任意的语句都可以构造一个TimerPrinter:

TalkingClock jabberer = new TalkingClock();
TalkingClock.TimerRrinter listener=jabberer.new TimerRrinter();

在外围类的作用域之外,可以OuterClass.InnerClass
内部类声明的所有静态域都必须是final。我们希望一个静态域只有一个实例,否则,每个外部对象会分别有一个单独的内部类实例。如果这个类不是final,就不是唯一的。内部类不允许有static方法。
局部内部类
局部类不能使用public和private访问说明符修饰,它的作用域被限定声明在这个局部类的块中。局部类的优势,对外部世界可以完全隐藏起来。并且在内部只有使用它的方法知道这个类的存在
由外部方法访问变量
局部类还有一个优点,不仅能够访问包含他他们的外部类,还可以访问局部变量,不过那些局部变狼必须声明为final,这说明一旦生命无法改变。
匿名内部类
将局部内部类的使用再深入一步,假设之创建这个类的一个对象,就不要命名了。这种类被称为匿名内部类。他的含义是创建一个实现接口的类的新对象,需要实现的方法定义在{}中。通常的语法格式:

new SuperType(construction parameters)
	{
		inner class methods and datas
	}

由于构造器名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器。取而代之的是,将构造器参数传递给超类构造器。尤其是在内部类实现接口的时候,不能有任何参数,不仅如此,还提供一组括号

new InterfaceType
{
	methods and data
}

如果构造参数的闭小括号后面跟着一个开大括号,正在定义的就是匿名内部类
静态内部类
有时候只是为了把一个类隐藏在另一个类的内部,并不需要内部类引用外围类的对象,为此,可以将内部类声明为static,以便取消产生的引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值