黑马程序员技术交流社区
标题:
内部类的问题 求解答
[打印本页]
作者:
YI_LI_A_E
时间:
2015-4-2 15:31
标题:
内部类的问题 求解答
class Outer
{
private static int x=3;
static class Inner
{
void function()
{
System.out.println(x);
}
}
}
class Demo
{
public static void main(String[] args)
{
new Outer.Inner().function();
}
}
复制代码
new Outer.Inner().function();这句话为什么不能写成new Outer().Inner().function();
作者:
关山明月
时间:
2015-4-2 15:50
因为这个内部类是静态的
作者:
㏒假™面具
时间:
2015-4-2 15:53
内部类是静态的,静态成员可以通过类名直接调用,这句话可以写成new Outer().new Inner().function.
作者:
唯爱小七
时间:
2015-4-2 16:59
楼上正解
作者:
JarryHorse
时间:
2015-4-2 19:46
㏒假™面具 发表于 2015-4-2 15:53
内部类是静态的,静态成员可以通过类名直接调用,这句话可以写成new Outer().new Inner().function. ...
new Outer().new Inner().function.,哥们,您这句话的意思相当于new了个Outer对象,再“对象.new Inner()”可以这样写?有这种写法的么?对象.属性/方法中间也不应该有个new吧?不过这问题还真不好解释,还要了解java的类加载机制,不然就只能说调用静态成员就是“类.成员”这样的格式的吧,记住就好
作者:
㏒假™面具
时间:
2015-4-2 22:28
可能是我描述不清晰!静态成员调用有两种方式
1.new Outer(). new Inner().function();对象.成员
2. new Outer.Inner().function(); 类名.成员
你想写成的new Outer().Inner().function()是哪种调用方式?
静态成员的调用,不可能是 类名().成员 吧?
作者:
Sylvanas
时间:
2015-4-3 08:59
非static内部类在static方法中调用应该是new Outer.new Inner.func();而static内部类的话可以看做是个独立类,与外部类没有关联,用Inner.func()
作者:
夜班心桥
时间:
2015-4-4 10:39
首先,静态成员可以直接被“类名.”调用,也可以创建类的对象再通过"对象名."调用,
但我们不建议这么做,因为静态成员是随着类的加载而加载的,优先于对象存在。
所以,在这里,Inner 是静态内部类,而function方法时内部类的非静态方法,
其实楼主的那句话可以分解成这样:
Outer.Inner inner = new Outer.Inner();
inner.function();
至于:new Outer().Inner();这个意思就是:先创建Outer对象,然后通过 对象.Inner(),没有这样使用的啊!对象名只能调用成员方法和成员变量。
但是当Inner为非静态内部类时,而且该内部类在成员位置上时,可以在main方法里这样调用:
Outer.Inner inner = new Outer().new Inner();
希望对你有些帮助。
作者:
lwj123
时间:
2015-4-4 11:10
new Outer.Inner().function();
你可以将Outer.Inner看内部类的全名。
所以 new Outter.Inner()就是创建了内部类对象
拿着内部类对象去访问function这个内部类的非静态成员。
我觉得这样做才是正确的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2