多态事例
package com.epilogue.zuoye; import java.util.Scanner; public class Demo { static Scanner input = new Scanner(System.in); public static void main(String[] args) { System.out.println("欢迎来到宠物店,请选择想要购买的宠物:1.小狗\t2.小猫"); int choice = input.nextInt(); Pet pet = null; if (choice == 1) { System.out.println("购买成功!"); System.out.println("为你的小狗取个名字吧"); String name = input.next(); pet = new Dog(); Home(pet, name); } else if (choice == 2) { System.out.println("购买成功!"); System.out.println("为你的小猫取个名字吧"); String name = input.next(); pet = new Cat(); Home(pet, name); } else { System.out.println("选择错误"); } } public static void Home(Pet pet, String name) { pet.setName(name);// 设置初始值 pet.setHealth(100); pet.setIntimate(0); pet.setHunger(0); System.out.println("当前小狗的状态:\n名字:" + pet.getName() + "健康值:" + pet.getHealth() + "饥饿值:" + pet.getHunger() + "亲密值:" + pet.getIntimate()); while (true) { if (pet instanceof Dog) {// 父类对子类的引用 System.out.println("您想要和您的宠物做什么呢?1.喂食\t2.玩耍\t3.看家"); } if (pet instanceof Cat) { System.out.println("您想要和您的宠物做什么呢?1.喂食\t2.玩耍\t3.抓老鼠"); } int i = input.nextInt(); switch (i) { case 1: pet.eatAble(); break; case 2: pet.playAble(); break; case 3: if (pet instanceof Dog) { ((Dog) pet).lookHome();// 自下转型 } if (pet instanceof Cat) { ((Cat) pet).catchMouse(); } break; default: System.out.println("选择错误,请重新选择"); } } } } interface Able {// 创建Able接口 void eatAble(); void playAble(); } class Pet implements Able {// 创建一个Pet对象,继承Able接口 private String name; private int health; private int hunger; private int intimate; // 封装方法 public int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public int getIntimate() { return intimate; } public void setIntimate(int intimate) { this.intimate = intimate; } public void setName(String name) { this.name = name; } public String getName() { return name; } public int getHunger() { return hunger; } public void setHunger(int hunger) { this.hunger = hunger; } @Override public void eatAble() { health += 5; if (health > 100) { health = 100; } hunger -= 3; if (hunger < 0) { hunger = 0; } intimate += 3; if (intimate < 0) { intimate = 0; } if (intimate > 100) { intimate = 100; } System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger + "亲密值:" + intimate); } // 实现接口方法 @Override public void playAble() { health -= 5; if (health < 0) { health = 0; } hunger += 5; if (hunger > 100) { hunger = 100; } intimate += 3; if (intimate > 100) { intimate = 100; } System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger + "亲密值:" + intimate); } } class Dog extends Pet implements Able { void lookHome() {// 添加Dog自己特有的方法 String name = super.getName(); int health = super.getHealth(); health -= 3; if (health < 0) { health = 0; } setHealth(health); int hunger = super.getHunger(); hunger += 3; if (hunger > 100) { hunger = 100; } setHunger(hunger); int intimate = super.getIntimate(); intimate -= 3; if (intimate < 0) { intimate = 0; } setIntimate(intimate); System.out.println("看家ing。。。"); System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger + "亲密值:" + intimate); } @Override public void eatAble() {// 实现接口方法,继承父类 super.eatAble(); System.out.println("成功喂食"); } @Override public void playAble() { super.eatAble(); System.out.println("玩得很高兴"); } } class Cat extends Pet implements Able { void catchMouse() {// 添加Cat自己特有的方法 String name = super.getName(); int health = super.getHealth(); health -= 3; if (health < 0) { health = 0; } setHealth(health); int hunger = super.getHunger(); hunger += 3; if (hunger > 100) { hunger = 100; } setHunger(hunger); int intimate = super.getIntimate(); intimate -= 3; if (intimate < 0) { intimate = 0; } setIntimate(intimate); System.out.println("抓老鼠ing。。。"); System.out.println(name + "的状态:\n健康值:" + health + "饥饿值:" + hunger + "亲密值:" + intimate); } @Override public void eatAble() {// 实现接口方法,继承父类 super.eatAble(); System.out.println("成功喂食"); } @Override public void playAble() { super.playAble(); System.out.println("玩得很高兴"); } }