为了账号安全,请及时绑定邮箱和手机立即绑定

java中的多态性

java中的多态性

月亮岛Superman 2017-12-16 23:15:01
public class Test01 {     public static void main(String[] args) {          Father01 obj = new Son01();          System.out.println(obj);          System.out.println(obj.name);     }}class Father01 {         public String name = "fu";         Father01() {          System.out.println(this);          System.out.println(this.name);            }}class Son01 extends Father01 { public String name = "son";}  本人很不理解System.out.println(obj.name);的结果为什么是  fu  呢?   Father01 obj = new Son01();  这段代码只有一个对象,那就是new出来的Son01对象,obj指向的是Son01对象,为什么输出结果不是son而是fu?求大神解答,感激不尽
查看完整描述

1 回答

?
qq_狼烟四起_0

TA贡献12条经验 获得超5个赞

 Father01 obj = new Son01(); 的意思是在类Father01中实例化一个Son01()方法的对象。但是你的Father01类中没有Son01()方法,所以实例化的是父类的对象,最后执行主类中的两条printf,再输出一条fu。其实obj一直是父类的对象。

父类 xx = new 子类()定义的对象只能调用继承来的方法。就是父类中的方法

子类 xx = new 子类()定义的对象调用的是子类的方法,而不是父类的。

package test;

public class FatherNewSon {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		a ta = new b();
		b tb = new b();
		ta.test();
		//ta.son();
		tb.test();
		tb.son();
	}
}

class a {
	public a() {
	}

	public void test() {
		System.out.println(this.getClass().getName());
	}
}

class b extends a {
	public b() {
		System.out.println(false);
	}

	public void son() {
		System.out.println("son");
	}
}

ta.son是错误的方法

查看完整回答
反对 回复 2017-12-17
  • 1 回答
  • 0 关注
  • 1121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信