关于Java的多态,还有令人蛋疼的数值传递

【多态写法,需要强制类型转换】

package ToObject.Practice.Duo;
/**
 * 	【多态写法,需要强制类型转换】
 * 	超人谈生意
 * 	谈生意时,突然有人跳楼
 * 	于是就过去救人去了
 * @author xinha
 *
 */
class Person{
	String name;
	
	Person(String name){
		this.name = name;
	}
	void talk() {
		System.out.println(name + " is talking business");
	}
}
class SuperMan extends Person{
	SuperMan(String name){
		super(name);
	}
	void fly() {
		System.out.println(name + " is flying.");
	}
}
public class Test {
	public static void main(String[] args) {
		//多态写法,需要强制转换
		Person per = new SuperMan("ChaoChao");
		per.talk();
		SuperMan supM = (SuperMan)per;
		supM.fly();
		System.out.println(per.name);
	}
}

运行结果:
ChaoChao is talking business
ChaoChao is flying.
ChaoChao

———————————————————————————————————————————————
【多态写法,不需要强制类型转换,使用方法重载】

package ToObject.Practice.Duo.A;
/**
 * 	【多态写法,不需要强制类型转换,使用方法重载】
 * 	超人谈生意
 * 	谈生意时,突然有人跳楼
 * 	于是就过去救人去了
 * @author xinha
 *
 */
class Person{
	String name;
	
	Person(String name){
		this.name = name;
	}
	void talk() {
		System.out.println(name + " is talking business");
	}
	void fly() {
		System.out.println(name + " cannot fly, he/she is a normal human.");
	}
}
class SuperMan extends Person{
	String name;
	
	SuperMan(String name){
		super(name);
	}
	void fly() {
		System.out.println(name + " is flying.");
	}
}
public class Test {
	public static void main(String[] args) {
		//多态写法,需要强制转换
		Person per = new SuperMan("ChaoChao");
		per.talk();
		per.fly();
		System.out.println(per.name);
	}

}

运行结果:
ChaoChao is talking business
null is flying.
ChaoChao

我们发现之所以第二种方法内输出的结果是null,是因为是调用的是子类SuperMan的fly()函数,然而在这个类中想上找,我们可以发现SuperMan里面有name成员变量,于是便直接取了这个成员变量,但是由于我们只给Person种的name成员变量取了名字,所以这个时候 输出的不是 ChaoChao is flying,而是null is flying。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值