日期:2014-05-20  浏览次数:20676 次

main()方法引用成员变量的问题
class A{
public String s="a";

}
public class EC extends A{
  String ss="aa";
public static void main(String[]args){
EC ec=new EC();
System.out.println(ec.s);//为什么ec可以调用A中的成员变量;而ec为什么不能调用自身的成员变量;
  System.out.println(ec.ss);//A中的成员变量也不是static的啊;难道EC继承A之后,A中的成员变量跑到EC的main()方法中了?我觉得这不可能,到底是什么原因呢?

}
}

------解决方案--------------------
不太明白你想问什么 EC自身的成员变量不就是ss了么
------解决方案--------------------
不能这样说,不是说A的成员变量跑到main()方法中去,A和EC的成员变量都没跑到main()方法中去,而是都在堆中的(java中对象是存放在被叫做‘堆’的这样一块内存中的)这里只是从mian()方法中去调用对象的属性并把属性的值输出来而已;
接下来说继承的事:首先说下对类和对象,类是具有相同特性(数据成员java中的成员变量)和行为(功能java中的方法)的抽象数据结构(对象的集合);对象是某一特定问题所抽象出来的具有特定属性和行为的数据结构的实现(类的实例);那么可以说一个类代表了一系列相同的事物,这些事物可大可小,可有包含和被包含关系,这当中便用继承来表示这种关系,这里用关键词extends(extends:中文—扩展)来标识,这就意味着子类与父类具有相同或相似的属性和行为并且子类吧父类扩展了,子类是父类的延伸,他的范围比父类要大,子类拥有父类所拥有的非私有属性和方法,那么在子类中就可以访问父类的这些非私有的属性和方法,而不用在子类中体现出这种拥有关系(这点如果不清楚去看访问权限控制)。
所以在main()方法中,吧EC实例化以后,ec这个对象将拥有其父类的属性“s”,那么就可以通过“.”运算符把他点出来
------解决方案--------------------
静态方法不能调用非静态变量
所以在main()里不能调用ss
至于ec.s和ec.ss,这是ec这个变量访问自己的属性,没有用到静态方法
------解决方案--------------------
s是public的,这个是关键。