Java核心类库:内部类那点事儿

发表于:2012-4-18 09:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:只是小人物    来源:51Testing软件测试网采编

  内部类:定义在类的内部的类

  为什么需要内部类?

  ● 典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。

  ● java中的内部类和接口加在一起,可以实现多继承。

  ● 可以使某些编码根简洁。

  ● 隐藏你不想让别人知道的操作。

  使用内部类最吸引人的原因是:

  每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

  内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。

  特点:

  一、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。

  二、内部类可以直接或利用引用访问外部类的属性和方法,包括私有属性和方法(但静态内部类不能访问外部类的非静态成员变量和方法)。内部类所访问的外部属性的值由构造时的外部类对象决定。

  三、而外部类要访问内部类的成员,则只能通过引用的方式进行,可问内部类所有成员

  四、访问机制:

  1. System.out.println(this.x);或System.out.println(x);//内部类访问内部类的成员变量或成员方法可用此方法。 
  2. System.out.println(OuterClass.this.x);//内部类访问外部类的同名变量时可用此方法,如果没有同名可用System.out.println(x);

  五、内部类可以使用任意的范围限定:public/private/protected class InnerClass,且严格按照这几种访问权限来控制内部类能使用的范围。普通类的范围限定只可以是public或者不加。

  六、内部类的命名不允许与外部类 重名,内部类可以继承同级的内部类,也可继承其它类(除内部类和外部类)。

  七、内部类可以定义为接口,并且可以定义另外一个类来实现它

  八、内部类可以定义为抽象类,可以定义另外一个内部类继承它

  九、内部类使用static修饰,自动升级为顶级类,外部类不可以用static修饰,用OuterClass.InnerClass inner=new OuterClass.InnerClass();创建实例。内部类还可定义为final.

  十、内部类可以再定义内部类(基本不用)

  十一、方法内的内部类:

  方法内的内部类不能加范围限定(protected public private)

  方法内的内部类不能加static修饰符

  方法内的内部类只能在方法内构建其实例

  方法内的内部类如果访问方法局部变量,则此局部变量必须使用final修饰

  1)静态内部类(静态嵌套类)

  从技术上讲,静态嵌套类不属于内部类。因为内部类与外部类共享一种特殊关系,更确切地说是对实例的共享关系。而静态嵌套类则没有上述关系。它只是位置在另一个类的内部,因此也被称为顶级嵌套类。

  静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类不能访问外部类的成员和方法。

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号