A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© EarlyHeart 中级黑马   /  2014-7-10 02:18  /  1126 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 EarlyHeart 于 2014-7-11 12:05 编辑

什么是静态内部类?跟普通内部类有什么区别?
class A{
    static class B{
    }
}

6 个回复

倒序浏览
当内部类在成员位置上,就可以被成员修饰符所修饰。比如,private:将内部类在外部类中进行封装。 static:内部类就具备了static的特性。当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。在外部其它类中,如何直接访问static内部类的非静态成员呢?new Outer.Inner().function();
class Outer  
{  
    private static int x = 3;  
  
    static class Inner//静态内部类  
    {  
        void function()  
        {  
            System.out.println("inner :"+x);  
        }  
    }  
  
  
    void method()  
    {  
        System.out.println(x);  
        Inner in = new Inner();  
        in.function();  
    }  
}  
  
  
class InnerClassDemo  
{  
    public static void main(String[] args)   
    {  
        new Outer.Inner().function();  
    }  
}  
在外部其它类中,如何直接访问static内部类的静态成员呢?
Outer.Inner.function();
注意:
当内部类中定义了静态成员,该内部类必须是static的。
class Outer  
{  
    private static int x = 3;  
  
    static class Inner//静态内部类  
    {  
        static void function()  
        {  
            System.out.println("inner :"+x);  
        }  
    }  
  
    class Inner2  
    {  
        void show()  
        {  
            System.out.println("inner2 show");  
        }  
    }  
  
  
    public static void method()  
    {  
        Inner.function();  
    }  
}  
  
  
class InnerClassDemo  
{  
    public static void main(String[] args)   
    {  
        Outer.method();  
    }  
}  
当外部类中的静态方法访问内部类时,内部类也必须是static的。
回复 使用道具 举报
静态类作为类的静态成员存在于某个类中,需在类的定义中加入关键字static。
class Outer
{
        Private static int x = 3;     
       
        static class Inner
        {
                void method()
                {
                System.out.println("method"+x);  
                }
        }
}
class InnerClassDemo5
{
        public static void main(String[] args)
        {
                Outer.Inner in = new Outer.Inner();  // Outer.Inner()为直接通过外部类类名调用的内部类
                in.method();
        }
}
在类Outer中定义了静态类Inner后,可将静态类Inner看成类Outer的static成员。当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。因为内部类被静态化,Static成员可以在不创建外部类Outer对象的情况下,直接new 出内部类Inner的对象。
注意:当内部类中定义了静态成员,该内部类必须是static的; 当外部类中的静态方法访问内部类时,内部类也必须是static的。
回复 使用道具 举报
静态内部类的成员都需要static修饰吧?
回复 使用道具 举报
M路 发表于 2014-7-10 02:31
当内部类在成员位置上,就可以被成员修饰符所修饰。比如,private:将内部类在外部类中进行封装。 static: ...

回答的很详细,谢谢!
回复 使用道具 举报
M路 发表于 2014-7-10 02:31
当内部类在成员位置上,就可以被成员修饰符所修饰。比如,private:将内部类在外部类中进行封装。 static: ...

学习了  自己都忘记这部分 了
回复 使用道具 举报
崔MQ 中级黑马 2014-7-11 12:34:40
7#
静态内部类,外部可以引用的,和普通的类差不多
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马