【多态写法,需要强制类型转换】
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。