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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐巍 黑马帝   /  2012-3-6 02:15  /  2480 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐巍 于 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();
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1 早点休息

查看全部评分

6 个回复

倒序浏览
因为show()方法不是静态的,可以用类名直接调用要求的是方法静态,而不是类
回复 使用道具 举报
楼上正解
回复 使用道具 举报
{:soso_e127:}静态方法才能直接被类名调用! JVM 初始化了你的类 但是没有在方法区中加载静态方法 那么你的类名去哪里调用这个方法呢?
回复 使用道具 举报
额,看你的问题,首先我要说的是,你提的这个问题我觉得非常好的一个问题啦!关于这个问题是这样的:
静态方法又称类方法,非静态方法称对象方法。这句话表示静态方法可以直接用类调用,而非静态方法就必须要用对象才能调用
我相信LZ应该明白了你出错的原因了吧!!其它的我觉不多说了哈!
回复 使用道具 举报
  Inner2.show();//报错位置。Inner2是静态内部类,为什么不能用类名直接调用show方法?
因为,show()不是静态的方法呀!如果你要调用必须是静态的,才能用类名调用。
当然你也可以创建一个对象以后在调用呀。比如:new Inner(),show();
回复 使用道具 举报
很想abstract类的那种逻辑,有抽象方法的类肯定是抽象类 ,当然没抽象方法的也可以定义为抽象类 那种修饰逻辑很相像,必须承认有抽象方法的抽象类才有实际意义,就如果有静态方法的类才是有意义的静态类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马