Java编程思想学习笔记(8)——内部类(1)

前言:本节主要介绍《Java编程思想》第十章——内部类
一、创建内部类
创建内部类的方式就是将类置于外部类里面

public class A{
	class B{
	}
}

二、链接到外部类
1.当生成一个内部类的对象时,此对象与制造他的外围对象之间就有了一种联系,所以它能访问其外围对象的所有成员,而不需要任何特殊条件。此外,内部类还拥有其外围类的所有元素的访问权
2.当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密捕获那个外围类对象的引用。
三、使用.new 与.this
1.使用**.this**表示你需要生成对外部类对象的引用。这样产生的引用自动地具有正确类型,这一点在编译器期就被知晓并受到检查,因此没有任何运行时开销。
2.有时你可能想告知某些其它对象,去创建某个内部类的对象。要实现此目的,你必须在 new表达式中对其他外部类对象的引用,这是需要使用 .new语法。例如

public class DotNew{	
	public class Inner{}
	public static void main(String[] args){
		DotNew dn =new DotNew();
		DotNew.Inner=dn.new Inner();
	}
}

在拥有外部类对象之前是不可能创建内部类对象。
四、内部类与向上转型:当将内部类向上转型为其基类,尤其是转型为一个接口的时候,内部类就有了用武之地。这是因为此内部类——某个接口的实现——能够完全不可见,并且不可用。所得到的只是指向基类或者接口的引用,所以能够方便地隐藏实现细节。
五、在方法和作用域内的内部类
我们可以在一个方法里面或者在任意的作用域内定义内部类。理由:
1).如前所示,你实现了某类型的接口,于是可以创建并返回对其的引用。
2).你要解决一个复杂的问题,想创建一个类来辅助你的解决方案,但又不希望这个类是公共的。
六、匿名内部类

public class Parcel7{
	public Contents contents(){
		return new Contents(){
			private int i=11;
			public int value(){return i;}
		}
	}
	public static void main(String[] args){
		Parcel7 p=new Parcel7();
		Contents c=p.contents();
	}
}

如示例所示,这个意思就是:”创建一个继承自Contents的匿名类的对象“通过new表达式返回的引用被自动向上转型为对Contents的引用。
1.如果定义一个匿名类,并且希望它使用一个在其外部定义的对象,那么编译器就会要求这个参数是final的
2.在匿名类中不可能有命名构造器(因为它根本没有名字!),但通过实例初始化,就能打到匿名类创建一个构造器的效果,当然对于匿名内部类而言,实例初始化的实际效果就是构造器。当然它受到了限制——你不能重载实例初始化方法,所以你仅有一个这样的构造器。
3.匿名内部类对于工厂模式的工厂方法创建极为方便。
七、嵌套类
1.如果不需要内部类对象与其外围类对象之间存在联系,那么可以将内部类声明为static。这通常称为嵌套类。这意味着
1).要创建嵌套类的对象,并不需要其外围类的对象。
2).不能从嵌套类的对象中访问非静态的外围类对象。
2.普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段,也不包含嵌套类。
3.接口内部类 :放入接口的任何类都自动地是publicstatic
4.多层内部嵌套类都能透明的访问所有它所嵌入的外围类的所有成员。
八、关于内部类
1.内部类的好处:每个内部类都能独立地继承自一个(接口)的实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
2.内部类的一些其它特性:
1)内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。
2)在单个外围类中,可以让多个内部类以不同的方式实现同一接口,或继承同一个类
3)创建内部类对象的时刻并不依赖于外围类的对象创建。
4)内部类并没有令人迷惑的"is-a"关系,它就是一个独立的实体。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值