java中访问静态内部类时为什么不能创建外部类的对象 10
小程序如下:classOuter{staticintx=2;staticclassInner{}}classTest{publicstaticvoidmain(Strin...
小程序如下:
class Outer{
static int x = 2;
static class Inner{
}
}
class Test{
public static void main(String[] args){
new Outer.Inner(); //正确
new Outer().new Inner(); //编译报错:限定的新静态类
}
}
我知道访问静态内部类可以不实例化外部类,但是为什么实例化就报错呢?
比如在上面的小程序中,我要输出x,确实可以Outer.x,但是我也可以使用new Outer().x啊,为什么在内部上就报错呢? 展开
class Outer{
static int x = 2;
static class Inner{
}
}
class Test{
public static void main(String[] args){
new Outer.Inner(); //正确
new Outer().new Inner(); //编译报错:限定的新静态类
}
}
我知道访问静态内部类可以不实例化外部类,但是为什么实例化就报错呢?
比如在上面的小程序中,我要输出x,确实可以Outer.x,但是我也可以使用new Outer().x啊,为什么在内部上就报错呢? 展开
2个回答
展开全部
你首先要明白new Outer().new Inner()是干什么的,这个是在外围类中穿件非静态内部类时的代码,非静态内部类必须要持有一个隐含的指向外部类的引用,所以必须先new outer再new inner,但是如果是非静态的,就无需持有外部类引用,这么写有什么道理呢?
追问
如果我创建了一个外部类的对象来调用外部类中的方法:
Outer out = new Outer();
//....省略
然后这个时候我需要使用到内部类中的方法,我认为的情况是可以直接这么写:
out.new Inner().method();
直接使用自己已经创建过的对象,但是结果是这样写会出现上面的错误
展开全部
静态内部类
静态内部类定义在类中,任何方法外,用static定义。
静态内部类只能访问外部类的静态成员。
生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:
Outer.Inner in=new Outer.Inner();
而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。可以定义私有静态内部类。
静态内部类定义在类中,任何方法外,用static定义。
静态内部类只能访问外部类的静态成员。
生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:
Outer.Inner in=new Outer.Inner();
而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。可以定义私有静态内部类。
追问
没太懂,
实际上使静态内部类成为了一个顶级类
是什么意思呢?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询