本帖最后由 谢振宣 于 2014-4-28 11:25 编辑
正在看基础视频,碰到一个小问题不太明白,哪位帮忙解决一下
毕老师的第10天的面向对象练习中的第6题
- class Super
- {
- int i=0;
- public Super(String a)
- {
- System.out.println("A");
- i=1;
- }
- public Super()
- {
- System.out.println("B");
- i+=2;
- }
- }
- class Demo extends Super
- {
-
- public Demo(String a)
- {
- System.out.println("C");
- i=5;
- }
- public static void main(String[] args)
- {
- int i=4;
- Super d=new Demo("A");
- System.out.println(d.i);
- }
- }
复制代码 输出为:B C 5
把int i=4;定义为成员变量后,输出变了
- class Super
- {
- int i=0;
- public Super(String a)
- {
- System.out.println("A");
- i=1;
- }
- public Super()
- {
- System.out.println("B");
- i+=2;
- }
- }
- class Demo extends Super
- {
- int i=4;//把int i=4;定义为成员变量后,输出变了
- public Demo(String a)
- {
- System.out.println("C");
- i=5;
- }
- public static void main(String[] args)
- {
-
- Super d=new Demo("A");
- System.out.println(d.i);
- }
- }
复制代码 此时输出为:B C 2
多态中,对于成员变量无论编译还是运行都看左边。
第一次,在子类的构造函数中可以修改,已经赋值给子类对象的,父类的成员变量的值
第二次,在子类的构造函数中却不可以修改,已经赋值给子类对象的,父类的成员变量的值
谁能解释一下?
|