声明为静态类后,为什么不能将“静态”概念覆盖到它的所有成员中去?而是再要分别指定各成员为“静态”?
public class test {
 
public test() {
super();
// TODO Auto-generated constructor stub
} /**
 * @param args
 */
public static void main(String[] args) {
    
gg kk=new gg('a');
System.out.println(kk.getc());
  // TODO Auto-generated method stub }}
class gg
{    public gg(char i)
       {
        inn=new inner(i);
       }
private static class inner
{
public  char c;

public inner(char C)
         {c=C;}
}
public char getc()
{
return inner.c;
}


public  inner inn;

}
编译报inner.c不是“静态的”??!
真是的,用C++的思想老想不通:连类入口地址都分配了吗,为什么inner.c还不是“静态”?

解决方案 »

  1.   

    用习惯了C++,转JAVA还真有一些不理解,请各位JAVA高手指点。
      

  2.   

    在JAVA中,静态的内部类叫做嵌套类,意义和C++不同的
    只有在嵌套类里面可以用静态数据和字段
    嵌套类可以不需要外围类对象的引用
      

  3.   

    连类入口地址都分配了吗,为什么inner.c还不是“静态”?
      

  4.   

    因为c不是静态的,所以不是静态的。
    public  char c; -----> public static char c;
      

  5.   

    对,在表态类内部的相关成员必须声明为static的
      

  6.   

    private static class inner    
    inner前面的static声明,不是代表gg的所有对象都共享inner类,而只是表明这个内部类不需要gg的引用(外部引用).所以在inner内部的成员变量,并不能inner.c来访问,要以inner.c来访问成员变量,还得把c设置为静态的。内部类和类之间的关系仅限于类的关系,gg的实例并不拥有inner的对象。
      

  7.   

    楼主犯常识性错误了。inner是“类”,不是“实例”!而c是实例变量,怎么能用类名去访问一个实例变量呢?很显然的错误。
      

  8.   

    Dan1980() 
    inner是“类”,不是“实例”!而c是实例变量,怎么能用类名去访问一个实例变量呢?很显然的错误。yeah
      

  9.   

    return inner.c-->return inn.c就可以了