黑马程序员技术交流社区

标题: 关于静态内部类的问题 [打印本页]

作者: 唐巍    时间: 2012-3-6 02:15
标题: 关于静态内部类的问题
本帖最后由 唐巍 于 2012-3-6 02:15 编辑

问题代码:
class Outer
{
        private static int x=3;
        static class Inner
        {
                static void function()
                {
                        System.out.println("inner:"+x);
                }
        }
        static class Inner2
        {
                void show()
                {
                        System.out.println("inner2 show");
                }
        }
        static void method()
        {
                Inner2.show();//报错位置。Inner2是静态内部类,为什么不能用类名直接调用show方法?
                Inner.function();
        }
}
       

class InnerDemo2
{
        public static void main(String[] args)
        {
                Outer.method();
        }
}
作者: 杨毅    时间: 2012-3-6 09:54
因为show()方法不是静态的,可以用类名直接调用要求的是方法静态,而不是类
作者: 张开开    时间: 2012-3-6 10:00
楼上正解
作者: 程洪    时间: 2012-3-6 10:00
{:soso_e127:}静态方法才能直接被类名调用! JVM 初始化了你的类 但是没有在方法区中加载静态方法 那么你的类名去哪里调用这个方法呢?
作者: 黄方    时间: 2012-3-6 10:54
额,看你的问题,首先我要说的是,你提的这个问题我觉得非常好的一个问题啦!关于这个问题是这样的:
静态方法又称类方法,非静态方法称对象方法。这句话表示静态方法可以直接用类调用,而非静态方法就必须要用对象才能调用
我相信LZ应该明白了你出错的原因了吧!!其它的我觉不多说了哈!
作者: 王杰    时间: 2012-3-6 11:09
  Inner2.show();//报错位置。Inner2是静态内部类,为什么不能用类名直接调用show方法?
因为,show()不是静态的方法呀!如果你要调用必须是静态的,才能用类名调用。
当然你也可以创建一个对象以后在调用呀。比如:new Inner(),show();
作者: 泮和顺    时间: 2012-3-7 09:20
很想abstract类的那种逻辑,有抽象方法的类肯定是抽象类 ,当然没抽象方法的也可以定义为抽象类 那种修饰逻辑很相像,必须承认有抽象方法的抽象类才有实际意义,就如果有静态方法的类才是有意义的静态类。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2