6.7.3 程序实例

6.7.3 程序实例

【例6-7】内部类的定义。

img246

【程序说明】

该例声明的Person类中包含有Dealer类。在此,Person类为外部类,Dealer类为内部类,内部类Dealer中也可以声明成员变量和方法。

【例6-8】本例演示嵌套的两个类之间的访问规则,即在外部类中,通过一个内部类的对象可以引用内部类中的成员;反之,在内部类中可以直接引用它的外部类的成员。

img247

img248

程序运行结果:

img249

【程序说明】

1)本例的类Person2中声明了成员变量a、内部类Dealer、实例方法show和main方法,在内部类Dealer中声明了构造方法和show方法,构造方法存取了外部类Person2的成员变量a。

2)本例的外部类Person2中有实例方法show(),内部类中也有实例方法show(),两者虽然名字相同,却含义不同。使用时,外部类Person2的对象调用Person2的show(),如“p2.show();”,内部类Dealer的对象调用Dealer的show(),如“d1.show();”。

【例6-9】外部类与内部类的成员同名示例,通过不同类的对象访问不同的成员。

img250

img251

程序运行结果:

img252

【程序说明】

1)本例的类DealerGroup中声明了成员变量a,name、内部类Dealer、实例方法Dea()和main()方法,在内部类Dealer中声明了成员变量a、name和show方法。在非静态的内部类中不能声明为静态变量,所以Dealer中的a只能是实例变量。2)如果在外部创建内部类的对象,就必须使用内部类的全名。该例中在main方法里首先使用DealerGroup.Dealer d1声明内部类的对象d1,再通过调用外部类的方法“p3.Dea();”获得内部类的一个实例。3)在内部类Dealer的show方法中,访问了三个不同含义的a:外部类的静态变量,内部类的静态变量以及方法的参数。这时须在a前加上相应的修饰符,编译时才能被区分。

内部类的主要优点是节省编译后产生的字节码文件的大小;缺点是使程序结构不清楚。

在实际的Java程序设计中,内部类主要用来实现接口。