当前位置:编程学习 > JAVA >>

子类继承父类,new的时候,结果太奇怪了

class Parent2 {
int a = 1;

public void test01() {
System.out.println(a);
}
}

class Sub2 extends Parent2 {
int a = 2;
int b = 4;
public void test01() {
System.out.println(a);
}
}

public class Example {
public static void main(String[] args) {
Parent2 sub2 = new Sub2();
Sub2 sub3 = (Sub2) sub2;
System.out.println(sub2.a);
sub2.test01();
System.out.println(sub3.a);
sub3.test01();
}
}


最后结果是
1
2
2
2
Parent2 sub2 = new Sub2();  这不是new 谁,就拥有谁的属性吗?怎么sub2.a是1?而且调用方法,结果又变成了2,?好郁闷
最后两个结果,是因为向下类型转换,这个我还是懂的
--------------------编程问答-------------------- 成员变量并没有被覆盖的 --------------------编程问答-------------------- 楼主你可以这样理解,向上转型,就相当于在家里面,儿子在家,有人来找他老爸,他冒充他老爸,比如戴个他老爸的帽子就跟那人出去了。在楼主的代码中,Parent2  中的变量a就相当于他老爸的帽子,那么System.out.println(sub2.a);就相当于把帽子拿出来展示给别人看,虽然儿子也有自己的帽子,但他现在很明显他在冒充他老爸,带的是他老爸的帽子,也就是Parent2中的a,值为1.
sub2.test01();接着调用方法,楼主的程序里面,父类和子类中都有这个方法,也就是说,子类覆盖了中的方法。打个比方,老爸和儿子都是老师,老爸是教数学的,也就是Parent2中的test01()方法调用Parent2中的a,
而儿子是教计算机的,也就是子类Sub2中的也是test01()方法,但调用的是Sub2中的a,如果子类中不具备这个,才到父类中去找。所以,sub2.test01()的值为Sub2中的a也就是2.
希望对楼主有用! --------------------编程问答-------------------- (多态)声明父类(接口),创建子类.
(属性)定义的什么,拥有什么.
(方法)创建的什么,执行什么. --------------------编程问答-------------------- 成员变量是没有多态的。
Parent2 sub2 = new Sub2();
Sub2 sub3 = (Sub2) sub2;
System.out.println(sub2.a);
sub2变量的类型是Parent2,所以sub2.a是1。
sub3变量的类型是Sub2,所以sub3.a是2。

但是方法是多态的,实际创建的对象类型是Sub2,所以输出都是2。 --------------------编程问答-------------------- 各位解释的都不错,谢谢了 --------------------编程问答-------------------- 属性是静态绑定在类上
方法是动态绑定到对象上  --------------------编程问答-------------------- 这个 我昨天的时候刚学的 1、首相你要了解的知识是,成员变量绑定的是引用的类型,方法绑定的是对象的类型,2、在继承中子类可以重写父类的方法,引用指向的是父类的对象就调用父类的方法,引用指向子类的对象就调用子类重写的方法,相反,成员变量看的是引用的类型,父类型调用父类的成员变量,子类型调用子类的成员变量。3、简单说 方法看对象,变量看类型。希望能帮助你 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 我原来也不懂,现在学习了 --------------------编程问答--------------------
引用 7 楼 as339000204 的回复:
这个 我昨天的时候刚学的 1、首相你要了解的知识是,成员变量绑定的是引用的类型,方法绑定的是对象的类型,2、在继承中子类可以重写父类的方法,引用指向的是父类的对象就调用父类的方法,引用指向子类的对象就调用子类重写的方法,相反,成员变量看的是引用的类型,父类型调用父类的成员变量,子类型调用子类的成员变量。3、简单说 方法看对象,变量看类型。希望能帮助你


厉害厉害,对我有帮助 --------------------编程问答-------------------- 本来很简单的问题,被你的变量名弄复杂了! --------------------编程问答-------------------- 谢谢了。我也在这个问题上纠结着。, --------------------编程问答-------------------- 分数平均分吧。 --------------------编程问答-------------------- --------------------编程问答-------------------- 研究一下就懂了。多态问题,父类在子类中有方法,就调用子类的方法。 --------------------编程问答-------------------- 除
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,