/*
需求:多态测试
*/
//定义一个抽象父类
abstract class Person{
//吃的方法是子类共有的 ,但是吃的东西不同,所以定义为抽象方法
abstract void eat();
}
//工具类,主函数new该类对象,即可调用方法
class DoFunction{
public static void doFunction(Person p){
p.eat();
if(p instanceof Man){//判断P是什么类型
Man m = (Man)p;//如果是男人类,则向下转型
m.smok();
}else{
Woman w = (Woman)p;//如果是女人类,则向下转型
w.shop();
}
}
}
//定义一个子类
class Man extends Person{
public void eat(){
System.out.println("吃肉");
}
public void smok(){
System.out.println("抽烟");
}
}
//定义一个子类
class Woman extends Person{
public void eat(){
System.out.println("吃蔬菜");
}
public void shop(){
System.out.println("购物");
}
}
//主函数
class PersonDemo{
public static void main(String []args){
/*
Person p = new Man();//向上转型,将男人强制变成人
p.eat();//调用父类方法
Man m = (Man)p;//向下转型,将男人变成人后,又变成男人
m.smok(); //调用男人的方法
*/
// p.doFunction(new Man());
DoFunction df = new DoFunction();
df.doFunction(new Man());
df.doFunction(new Woman());
}
}
转载于:https://blog.51cto.com/9274590/1692517