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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© clp 中级黑马   /  2013-5-24 20:47  /  1256 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 clp 于 2013-5-25 06:36 编辑

内部类中定义了静态成员,为什么该内部类也必须是静态的?
外部类必须创建对象才能访问内部类吗?匿名内部类和多态是否存在联系?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

3 个回复

倒序浏览
1.如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。
注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。
2.内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。
3.多态的前提:
        a:必须要有关系,比如继承、或者实现。
        b:通常会有覆盖操作。
跟是什么类无关。
回复 使用道具 举报
?1
注意1.当内部类中定义了静态成员,该内部类必须是static
               当内部类定义了static的成员是,就意味着@1 = Outer.Inner.function(); 是可以正确执行的,但是该内部类却不是static,则意味着 @2 = Outer.Inner   是错误的(不可用类直接调用),因此@1和@2是矛盾的。因此必须符合注意1。

?2
内部类(未加static修饰)像成员变量一样只有在 new 出对象时才会存在于内存中,即加载内部类。因此可以以 new Outer().new Inner2().show(); 正常运行。


?3
必然有联系 :

                new Thread(new Runnable(){

                        @Override
                        public void run() {
                                // TODO Auto-generated method stub

                        }}).start();
回复 使用道具 举报
1、很直观的解释:如果内部类不是静态就会报错。
   实际原因,静态成员随类的生成而生成,当外部类一生成的时候,它就会把他里面的静态成员一起加载进内存,所谓的静态绑定,而如果内部类不是静态,它的静态成员加载进内存的存储肯定不行。当然这跟调用肯定也有一定关系吧。
2、首先匿名内部类跟多态肯定有联系,在定义匿名内部类的前提就是继承一个类或者实现接口。
  内部类相对于外部类来说,属于外部类的成员了,而类调用成员有一定的方式,像调用方式是 .方面名();而内部类毕竟是一个类,调用它的方式就是创建对象调用,所以即使是外部了也要用创建对象的方式调用,这个应该比较好理解吧。
以上纯属个人理解,如有不妥,欢迎指正!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马