快速业务通道

深入理解Java嵌套类和内部类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

深入理解Java嵌套类和内部类

时间:2010-12-20

一、什么是嵌套类及内部类?

可以在一个类的内部定义另一个类,这种类称为嵌套类(nested classes),它 有两种类型:

静态嵌套类和非静态嵌套类。静态嵌套类使用很少,最重要的是非静态嵌套 类,也即是被称作为内部类(inner)。嵌套类从JDK1.1开始引入。其中inner类又 可分为三种:

其一、在一个类(外部类)中直接定义的内部类;

其二、在一个方法(外部类的方法)中定义的内部类;

其三、匿名内部类。

下面,我将说明这几种嵌套类的使用及注意事项。

二、静态嵌套类

如下所示代码为定义一个静态嵌套类,

public class StaticTest { private static String name = "javaJohn"; private String id = "X001"; static class Person{ private String address = "swjtu,chenDu,China"; public String mail = "josserchai@yahoo.com";//内部类公有成员 public void display(){ //System.out.println(id);//不能直接访问外部类的非静态成员 System.out.println(name);//只能直接访问外部类的静态成员 System.out.println("Inner "+address);//访问本内部类成员。 } } public void printInfo(){ Person person = new Person(); person.display(); //System.out.println(mail);//不可访问 //System.out.println(address);//不可访问 System.out.println(person.address);//可以访问内部类的私有成员 System.out.println(person.mail);//可以访问内部类的公有成员 } public static void main(String[] args) { StaticTest staticTest = new StaticTest(); staticTest.printInfo(); } }

在静态嵌套类内部,不能访问外部类的非静态成员,这是由Java语法中"静态 方法不能直接访问非静态成员"所限定。

若想访问外部类的变量,必须通过其它方法解决,由于这个原因,静态嵌套 类使用很少。注意,外部类访问内部类的的成员有些特别,不能直接访问,但可 以通过内部类来访问,这是因为静态嵌套内的所有成员和方法默认为静态的了。 同时注意,内部静态类Person只在类StaticTest 范围内可见,若在其它类中引 用或初始化,均是错误的。

深入理解Java嵌套类和内部类(2)

时间:2010-12-20

三、在外部类中定义内部类

如下所示代码为在外部类中定义两个内部类及它们的调用关系:

public class Outer{ int outer_x = 100; class Inner{ public int y = 10; private int z = 9; int m = 5; public void display(){ System.out.println("display outer_x:"+ outer_x); } private void display2(){ System.out.println("display outer_x:"+ outer_x); } } void test(){ Inner inner = new Inner(); inner.display(); inner.display2(); //System.out.println("Inner y:" + y);//不能访问内部内变量 System.out.println("Inner y:" + inner.y);//可以访问 System.out.println("Inner z:" + inner.z);//可以访问 System.out.println("Inner m:" + inner.m);//可以访问 InnerTwo innerTwo = new InnerTwo(); innerTwo.show(); } class InnerTwo{ Inner innerx = new Inner(); public void show(){ //System.out.println(y);//不可访问Innter的y成员 //System.out.println(Inner.y);//不可直接访问Inner的任何成员和方法 innerx.display();//可以访问 innerx.display2();//可以访问 System.out.println(innerx.y);//可以访问 System.out.println(innerx.z);//可以访问 System.out.println(innerx.m);//可以访问 } } public static void main(String args[]){ Outer

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号