黑马程序员技术交流社区
标题:
关于static内部类的使用问题
[打印本页]
作者:
晓风妮子
时间:
2013-4-18 13:29
标题:
关于static内部类的使用问题
本帖最后由 晓风妮子 于 2013-4-20 13:22 编辑
我不明白,在这段代码中内部类Inner中的show方法没有被静态修饰,为什么可以调用其方法,为什么编译可以通过呢?
static.png
(16.15 KB, 下载次数: 38)
下载附件
2013-4-18 13:25 上传
作者:
沈浩
时间:
2013-4-18 15:15
因为内部类Inner中的show方法没有被静态修饰 所以要调用该类的show方法 要new一个对象 在method方法中 new了一个这样的对象i 当然 i 就可以调用show啦
作者:
刚金波
时间:
2013-4-18 17:12
那是因为method方法和main程序入口不在同一个类中。在类InnerDemo中实例化了一个Outer类的对象,就可以通过对象调用Outer类中的方法了。
但如果是这样的
class InnerDemo
{
public void method()
{
Inner i=new Inner();
i.show()
}
public static void main(String[] args)
{
method();
}
}
上面调用method方法就是错误的,这应该就是你想表达的意思了。
这是因为要在main函数中调用同在一个类中的方法,方法必须是带有static修饰符的静态方法。而要调用不同类中的方法,需要先实例化一个类的对象,通过对象来调用方法
作者:
杜成龙
时间:
2013-4-18 19:28
需要搞清楚一点:没有被static修饰的成员,我们通过建立对象去调用;
但如果是被static修饰的成员,我们不仅可以通过对象去调用,还可以通过类名去调用。
在你的程序中,你是通过创建一个对象去调用的,所以有没有static修饰,你都能调用成功,自然可以编译通过。
作者:
陈宇鹏
时间:
2013-4-18 19:38
static 对内部类是这样的。
当内部类的成员被static修饰时,内部类也必须是static的
但是,如果内部类是static的话。成员可以不是静态的。
作者:
gerenvip
时间:
2013-4-18 23:23
外部其他类调用一个类的外部类分为非静态内部类函数,静态内部类非静态函数,静态内部类静态函数
在外部其他类中访问非静态内部类函数访问方式是
Outer.Inner d = new Outer().new Inner(); 用变量d调用内部类的方法
在外部其他类中如何直接访问静态内部类中的非静态成员呢?
Outer.Inner d = new Outer.Inner();用变量d调用内部类的方法
或者new Outer.Inner().function();
在外部其他类中如何直接访问静态内部类中的静态成员呢?
直接访问 Outer.Inner.function();
楼主给的程序段中:
o.method()方法调用Outer里的method方法。而mehod方法中又调用了静态内部类中的非静态方法show
这就是在外部其他类中如何直接访问静态内部类中的非静态成员的问题
Outer.Inner d = new Outer.Inner();再用变量d调用内部类的方法
或者new Outer.Inner().show();
再看看内部类的访问规则:
1).内部类可以直接访问外部类中的成员,包括私有。
之所以可以直接访问外部类汇总的成员,因为内部类中持有了一个外部类的引用,格式外部类名.this
(2).外部类要访问内部类,必须建立内部类对象。
这就是为什么在Outer中的method方法访问内部类中的show方法时必须要创建内部类对象,否者,无法从静态上下文中引用非静态
作者:
风乐
时间:
2013-4-19 00:00
板凳回答的简单明了
作者:
黄玉昆
时间:
2013-4-19 07:16
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2