全屏

5.10.1内部类的概念


【专业IT培训机构,真正零首付入学www.bjsxt.com


      一般情况,我们把类定义成独立的单元。有些情况下,我们把一个类放在另一个类的内部定义,称为内部类(innerclasses)。

      内部类可以使用public、default、protected 、private以及static修饰。而外部顶级类(我们以前接触的类)只能使用public和default修饰。

注意

      内部类只是一个编译时概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为Outer的外部类和其内部定义的名为Inner的内部类。编译完成后会出现Outer.class和Outer$Inner.class两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量/方法名可以和外部类的相同。

【示例5-19】内部类介绍

/**外部类Outer*/
class Outer {
	private int age = 10;
	public void show(){
		System.out.println(age);//10
	}
	/**内部类Inner*/
	public class Inner {
		//内部类中可以声明与外部类同名的属性与方法
		private int age = 20;
		public void show(){
			System.out.println(age);//20
		}
	}
}

      示例5-19编译后会产生两个不同的字节码文件,如图5-24所示:

图5-24 内部类编译结果图.png

图5-24 内部类编译结果图

内部类的作用:

      1. 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。

      2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。 但外部类不能访问内部类的内部属性。

      3. 接口只是解决了多重继承的部分问题,而内部类使得多重继承的解决方案变得更加完整。

内部类的使用场合:

      1. 由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,在只为外部类提供服务的情况下可以优先考虑使用内部类。

      2.  使用内部类间接实现多继承:每个内部类都能独立地继承一个类或者实现某些接口,所以无论外部类是否已经继承了某个类或者实现了某些接口,对于内部类没有任何影响。


分类导航
点击按住视频可拖动

缩小

关闭

  • 正在学习
  • 北京总部地址:北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
  • 咨询电话:400-009-1906 010-56233821
  • Copyright 2007-2015 北京尚学堂科技有限公司
  • 京ICP备13018289号-1 京公网安备11010802015183