面向对象的深入:
多态的运用
package Duotai;
/*
* 父类
*
* 抽象类
*/
public abstract class Pet {
private String name="无名氏";
private int health=100;
private int love=0;
//构造
//无参
public Pet () {
}
//有参
public Pet (String name) {
this.name=name;
}
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 void print() {
System.out.println("自白: 姓名"+this.name+"健康值:"+this.health+"亲密度"+this.love);
}
//抽象方法
public abstract void eat();
}
package Duotai;
/*
*
*
* 主人类
*/
public class Master {
//属性
private String name;
private double money;//元宝
//构造
public Master (String name,double money) {
this.money=money;
this.name=name;
}
//方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
//喂宠物的方法
// public void feed(Dog dog) {
// dog.eat();
// }
// public void feed() {
// pe.eat();
// }
public void feed(Pet pet) {
pet.eat();
}
//领养宠物
public Pet getPet(String id) {
Pet pet = null;//初始化
if (id.equals("1")) {
//向上转型
pet = new Dog("挠挠", "柯基");
}
if (id.equals("2")) {
pet = new Pegniun("黑子", "Q仔");
}
if (id.equals("3")) {
pet = new Cat("喵星人","加菲");
}
return pet;
}
//和宠物玩耍方法
public void play(Pet pet) {
if (pet instanceof Dog) {
//向下转型
Dog dog =(Dog)pet;
dog.flyCatch();
}
else if (pet instanceof Pegniun) {
Pegniun png =(Pegniun)pet;
png.swimming();
}
else if (pet instanceof Cat) {
Cat cat = (Cat)pet;
cat.ball();
}
}
}
package Duotai;
/*
*
*
* 狗狗类
*/
public class Dog extends Pet {
//属性
private String strain;
//构造
//有参
public Dog (String name,String strain) {
super(name);
this.strain=strain;
}
//方法
public void eat() {
if (getHealth()>=100) {
System.out.println("狗狗吃饱了");
}
else {
setHealth(getHealth()+5);
}
}
//接飞盘方法
public void flyCatch() {
System.out.println("和主人接飞盘");
super.setHealth(getHealth()-10);
super.setLove(getLove()+5);
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
}
package Duotai;
/*
*
* 企鹅类
*
*/
public class Pegniun extends Pet {
//属性
private String sex ;
//构造
public Pegniun(String name,String sex) {
super(name);
this.sex=sex;
}
//方法
public void eat() {
if (getHealth()>=100) {
System.out.println("企鹅吃饱了");
}
else {
setHealth(getHealth()+3);//增加健康值
}
}
public void swimming() {
System.out.println("和主人游泳");
super.setHealth(getHealth()-7);
super.setLove(getLove()+3);
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
package Duotai;
public class Cat extends Pet {
private String color;
//无参
public Cat () {
}
//有参
public Cat (String name,String color) {
super(name);
this.color=color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
//方法
@Override
public void eat() {
if (getHealth()>=100) {
System.out.println("猫咪吃饱了");
}
else {
setHealth(getHealth()+4);
}
}
public void ball() {
System.out.println("和主人玩球");
super.setHealth(getHealth()-5);
super.setLove(getLove()+3);
}
}
package Duotai;
import java.util.Scanner;
public class DemoTest {
public static void main(String[] args) {
// Dog dog = new Dog("旺财", "中华田园犬");
// dog.setHealth(80);
// Pegniun pe = new Pegniun("黑蛋", "Q仔");
// pe.setHealth(70);
System.out.println("逛宠物商店:");
Master master = new Master("小智", 100);
System.out.println("请选择领养的宠物:(1.狗狗 2.企鹅 3.猫咪)");
Scanner input = new Scanner(System.in);
String id = input.next();
//获取宠物
Pet pet = master.getPet(id);
if (pet!=null) {
pet.setHealth(80);
System.out.println("领养成功");
//喂养宠物
master.feed(pet);
//和宠物玩
master.play(pet);
pet.print();
}
else {
System.out.println("领养失败");
}
// master.feed(dog);
// master.feed(pe);
// dog.print();
// pe.print();
}
}