网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 新手入门 > oop面向对象 > Java内部类(Inner Class)详解  

Java内部类(Inner Class)详解

2007-07-12  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。
1          Static member class(静态成员类)
类声明中包含“static”关键字的内部类。如以下示例代码,
Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。

public class  Outer{
    
//just like static method, static member class has public/private/default access privilege levels
    
    
//access privilege level: public 
    public static class Inner1 {
        
public Inner1() {
网管bitscn_com

            
//Static member inner class can access static method of outer class
            staticMethod();    
            
//Compile error: static member inner class can not access instance method of outer class
            
//instanceMethod();  
        }
网管联盟bitsCN@com

    }
    
    
//access privilege level: default 
    static class Inner2 {
        
    }
    
    
//access privilege level: private 
    private static class Inner3 {
        
//define a nested inner class in another inner class  中国网管联盟bitsCN.com
        public static class Inner4 {    
        }
    }

    
private static void staticMethod() {
        
//cannot define an inner class in a method
        /*public static class Inner4() { 中国网管联盟bitsCN.com
        }
*/
    }
    
    
private void instanceMethod() {
        
//private static member class can be accessed only in its outer class definition scope
        Inner3 inner3 = new Inner3();
        
//how to use nested inner class 网管网www_bitscn_com
        Inner3.Inner4 inner4 = new Inner3.Inner4();
    }
}

class Test {
    Outer.Inner1 inner1 
= new Outer.Inner1();
    
//Test and Outer are in the same package, so Inner2 can be accessed here
    Outer.Inner2 inner2 = new Outer.Inner2(); 
网管联盟bitsCN@com

    
//Compile error: Inner3 cannot be accessed here
    
//Outer.Inner3 inner3 = new Outer.Inner3(); 
}
 

1.1      静态成员类特性

静态成员类可访问外部类的任一静态字段或静态方法 网管u家u.bitscn@com

像静态方法或静态字段一样,静态成员类有public/private/default权限修饰符

网管bitscn_com

1.2      静态成员类约束

静态成员类不能与外部类重名

网管u家u.bitsCN.com

像外部类的静态方法一样,不能直接访问外部类的实例字段和实例方法 网管网www.bitscn.com

静态成员类只能定义于外部类的顶层代码或外部类其它静态成员类的顶层代码中(嵌套定义);不能定义于外部类的某个函数中。

网管联盟bitsCN@com

1.3      新增语法
    如示例代码所示,可以以“OuterClass.InnerClass”的方式来引用某个内部类。
1.4      什么时候使用静态成员类
B为A的辅助类,且只为A所用时,可将B定义为A的静态成员类。例如JDK中的LinkedList类就有Entry静态成员类:
public class LinkedList<E> extends AbstractSequentialList<E> 
   …;
   
private static class Entry<E> {
    E element;
    Entry
<E> next; 网管网www_bitscn_com
    Entry
<E> previous;

    Entry(E element, Entry
<E> next, Entry<E> previous) {
        
this.element = element;
        
this.next = next;

中国网管论坛bbs.bitsCN.com


        
this.previous = previous;
    }
    }
    …;
}

   显然,Entry用来表示LinkedList中的一个结点,只被LinkedList自身使用。

网管论坛bbs_bitsCN_com


TAGs
 上一篇:详细解读Java编程中的IO系统   下一篇:面向对象程序设计的基本原则
Java内部类(Inner Class)详解 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: