黑马程序员技术交流社区
标题:
内部类中的一些小问题
[打印本页]
作者:
clp
时间:
2013-5-24 20:47
标题:
内部类中的一些小问题
本帖最后由 clp 于 2013-5-25 06:36 编辑
内部类中定义了静态成员,为什么该内部类也必须是静态的?
外部类必须创建对象才能访问内部类吗?匿名内部类和多态是否存在联系?
作者:
葛迅
时间:
2013-5-25 00:42
1.如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。
注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。
2.内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。
3.多态的前提:
a:必须要有关系,比如继承、或者实现。
b:通常会有覆盖操作。
跟是什么类无关。
作者:
First
时间:
2013-5-25 00:44
?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();
作者:
神之梦
时间:
2013-5-25 01:12
1、很直观的解释:如果内部类不是静态就会报错。
实际原因,静态成员随类的生成而生成,当外部类一生成的时候,它就会把他里面的静态成员一起加载进内存,所谓的静态绑定,而如果内部类不是静态,它的静态成员加载进内存的存储肯定不行。当然这跟调用肯定也有一定关系吧。
2、首先匿名内部类跟多态肯定有联系,在定义匿名内部类的前提就是继承一个类或者实现接口。
内部类相对于外部类来说,属于外部类的成员了,而类调用成员有一定的方式,像调用方式是 .方面名();而内部类毕竟是一个类,调用它的方式就是创建对象调用,所以即使是外部了也要用创建对象的方式调用,这个应该比较好理解吧。
以上纯属个人理解,如有不妥,欢迎指正!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2