什么是多态
同一个实现接口,使用不同的实例而执行不同的操作
子类转换成父类的规则:
*将一个父类的引用指向一个子类对象时,称为上转型,自动进行类型转换
*此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
*此时通过父类引用变量无法调用子类特有的方法
/** * 宠物类,狗狗和企鹅的父类 */ package cn.yy.test01; public abstract class Pet { private String name; private int health; private int love; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public int getLove() { return love; } public void setLove(int love) { this.love = love; } public abstract void eat(); }
package cn.yy.test01; /** * * 狗狗类 * @author CKW * */ public class Dog extends Pet { private String strain;//品种 public String getStrain() { return strain; } public void setStrain(String strain) { this.strain = strain; } public Dog(String name,String strain) { super(); this.strain = strain; } public Dog() { super(); // TODO Auto-generated constructor stub } /** * 实现狗狗吃饭方法 * */ @Override public void eat() { } }
package cn.yy.test01; /** * 企鹅类 * @author CKW * */ public class Penguin extends Pet { private String sex;//性别 public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } /** * 实现企鹅吃饭方法 */ @Override public void eat() { // TODO Auto-generated method stub } }
package cn.yy.test01; /** * 主人类 * @author CKW * */ public class Master { private String name="";//主人名字 private int money=0;//元宝数 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } public Master (String name,int money){ this.name=name; this.money=money; } /** * 主人给宠物喂食 */ public void feed(Pet pet){ pet.eat(); } //主人给Dog喂食 public void feed(Dog dog){ dog.eat(); } //主人给Penguin喂食 public void feed(Penguin pgn){ pgn.eat(); } }
package cn.yy.test01; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Dog dog=new Dog("偶偶","雪瑞纳"); //Penguin penguin=new Penguin(); Master master=new Master("王先生", 100); master.feed( dog);//主人给狗狗喂食 } }