关于java多态的解释学习

来源:互联网 发布:windows 无线触摸板 编辑:程序博客网 时间:2024/06/08 16:53

关于java多态的的理解主要用两句话:

  • 子承父业 指 ----->继承父亲的称呼,手艺,特征
  • 打着父亲的名称干自己的事  指 -----> 伪装成父亲干活

接下来说明:   封装   继承  多态  
         
代码理解:
父类Pet
public abstract class Pet {private String name = "无名氏";// 昵称private int health = 100;// 健康值private int love = 0;// 亲密度/** * 抽象方法eat(),负责宠物吃饭功能。 */public abstract void eat();/** * 有参构造方法。 * @param name  昵称 */public Pet(){}public Pet(String name) {this.name = name;}public void setName(String name) {this.name = name;}public void setHealth(int health) {if(health>0&&health<100 ){this.health = health;}}public void setLove(int love) {this.love = love;}public String getName() {return name;}public int getHealth() {return health;}public int getLove() {return love;}/** * 输出宠物信息。 */public void print() {System.out.println("宠物的自白:\n我的名字叫" + this.name + ",健康值是"+ this.health + ",和主人的亲密度是"+ this.love + "。");}}
子类猫
public class Cat extends  Pet{    private String  CatStrain;// 品种    public Cat(String name, String CatStrain) {        super(name);        this.CatStrain = CatStrain;    }    @Override    public void eat() {            if(getHealth()>=100){                System.out.println("猫猫"+this.getName() +"吃饱了,不需要喂食了!");            }else{                this.setHealth(this.getHealth()+4);                System.out.println("猫猫"+this.getName() + "吃饱啦!健康值增加3。");            }        }}
子类狗
/** * 狗狗类,宠物的子类。 */public class Dog extends Pet {private String strain;// 品种/** * 有参构造方法。 * @param name   昵称 * @param strain   品种 */public Dog(String name, String strain) {super(name); this.strain = strain;}public String getStrain() {return strain;}/** * 重写父类的print方法。 */public void print(){super.print(); //调用父类的print方法System.out.println("我是一只 " + this.strain + "。");}/** * 实现吃食方法。  */public void eat() {if(getHealth()>=100){System.out.println("狗狗"+this.getName() +"吃饱了,不需要喂食了!");}else{this.setHealth(this.getHealth()+3);System.out.println("狗狗"+this.getName() + "吃饱啦!健康值增加3。");}}public void catchingFlyDisc() {System.out.println("主人和狗狗"+this.getName()+"玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5");}}
企鹅类
/** * 企鹅类,宠物的子类。 */public class Penguin extends Pet {private String sex;// 性别/** * 有参构造方法。 * @param name 昵称 * @param sex 性别 */public Penguin(String name, String sex) {super(name);this.sex = sex;}public String getSex() {return sex;}/** * 重写父类的print方法。 */public void print() {super.print();System.out.println("性别是 " + this.sex + "。");}/** * 实现吃食方法。  */public void eat() {if(getHealth()>=100){System.out.println("企鹅"+this.getName() +"吃饱了,不需要喂食了!");}else{this.setHealth(this.getHealth()+5);System.out.println("企鹅"+this.getName() + "吃饱啦!健康值增加3。");}}public void swimming() {System.out.println("主任和企鹅"+this.getName()+"玩游泳,企鹅健康值减少10,与主人亲密度增加5");}}

主人类
** * 主人类。 */public class Master {private String name = "";// 主人名字private int money = 0; // 元宝数/** * 有参构造方法。 * @param name 主人名字 * @param money 元宝数 */public Master(String name, int money) {this.name = name;this.money = money;}public void setName(String name) {this.name = name;}public void setMoney(int money) {this.money = money;}public int getMoney() {return money;}public String getName() {return name;}/** * 主人给D喂食。 */// 此时主人开始喂食 maser.feed() 传过来Dog的类型// 因为Pet 是父类所以自动的对象类型转换为Pet//此时传过来的Gog所然已经转变成Pet类型但是依然是狗的本质不变只是多了一个称呼。路径不变//当pet.eat()时pet会去调用父类的eat();//因为子类Dog继承了Pet切重写了eat()方法,所以此时会调用Dog类的eat()方法public void feed(Pet pet) {pet.eat();}//领养宠物public  Pet getPet(String type){      //new 不同的宠物Pet p1=null;if (type.equals("1")) {p1=new Dog("旺旺","串串");}if (type.equals("2")) { p1=new Penguin("黑白","Q仔");}return p1;}    //public  void play(Pet pet){if (pet instanceof Dog){Dog dog=(Dog) pet;       dog.catchingFlyDisc();}else  if (pet instanceof  Penguin){Penguin pgn=(Penguin) pet;pgn.swimming();}
开始实现测试结果
/** * 测试类,领养宠物并喂食。 */public class Test {public static void main(String[] args) {//狗企鹅此时为子类 要通过多态的方式来喂养//Pet 为父类  里面有一个抽象的feed方法Dog dog = new Dog("欧欧", "雪娜瑞");dog.setHealth(80); //设置健康值,以便正常喂食Penguin pgn = new Penguin("楠楠", "Q妹");Master master=new Master("王先生",100);   // master.feed(dog);   //主人给狗狗喂食master.feed(pgn);   //主人给企鹅喂食pgn.setHealth(80);  //设置健康值,以便正常喂食master.feed(pgn);  //主人再次给企鹅喂食   /*Master master=new Master("王先生",100);Pet p= master.getPet("1");p.eat();//做玩游戏的测试Dog dog = new Dog("欧欧", "雪娜瑞");master.play(dog);*/}}  

0 0
原创粉丝点击