声明为静态类后,为什么不能将“静态”概念覆盖到它的所有成员中去?而是再要分别指定各成员为“静态”?
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还不是“静态”?
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还不是“静态”?
只有在嵌套类里面可以用静态数据和字段
嵌套类可以不需要外围类对象的引用
public char c; -----> public static char c;
inner前面的static声明,不是代表gg的所有对象都共享inner类,而只是表明这个内部类不需要gg的引用(外部引用).所以在inner内部的成员变量,并不能inner.c来访问,要以inner.c来访问成员变量,还得把c设置为静态的。内部类和类之间的关系仅限于类的关系,gg的实例并不拥有inner的对象。
inner是“类”,不是“实例”!而c是实例变量,怎么能用类名去访问一个实例变量呢?很显然的错误。yeah