2011-04-06 24 views
0
import java.io.*; 
class YY 
{ 

    int a=0; 
    void putValue(int m) 
    { 
     a=m; 
    inner x=new inner(); 
     x.display(); 
    } 
    class inner 
    { 
    void display() 
     { 
     System.out.println("value of a:"+a); 
     } 
    } 
} 

class InnerYY 
{ 
    public static void main(String args[]) 
    { 
    YY ob=new YY(); 
    ob.putValue(90); 
    YY.inner i = new YY.inner(); 
    i.display(); 
    } 
} 

运行这个程序,我发现了以下错误而...误差与内部类对象

InnerYY.java:27:需要包含YY.inner一个封闭的实例 YY.inner我= new YY.inner(); ^ 1错误

+0

[需要包含的封闭实例]的可能重复(http://stackoverflow.com/questions/4297857/an-enclosing-instance-that-c​​ontains-my-reference-is-required) – 2013-09-26 12:40:25

回答

4

您的Inner类是非静态的,因此您必须使用YY的实例对其进行实例化。

在你的情况是Inner inner = ob.new Inner();

需要注意的是:

  • 如果你想要那个班公,你可以称其为YY.Inner(但你不能实例化这种方式)

  • 按惯例,您必须使用大写的类名(Inner而不是inner)。也就是说,我认为值得一提的是,通常在Java中(但这不像大写的类名称那样必要),开放的大括号保持在同一行。

0

要引用YYInnerYY将不得不实际上是内部YY(收盘休息前移动)。然而,你不能有一个静态的主要功能,这似乎是它的目的。

0

您尝试从静态调用YY.inner()创建非静态内部类。所以你需要创建对象yy = new YY(),然后调用inner = new yy.inner()。或者让内部类成为静态的。