链接:多态
1、使用父类作为方法的形参
例:(说明:在Lady类中写的带有参数的方法,在测试类里面运行的)
Lady.java
public class Lady {
/* //喂养狗
public void feedDog(Dog d){
d.eat();
}
//喂养狗
public void feedCat(Cat c){
c.eat();
}*/
//多态
public void feed(Pet p){
p.eat();
}
}
Pet.java
public abstract class Pet {
private int health; //健康值
private int love; //亲密度
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public int getHealth() {
return health;
}
/*public abstract void eat();*/
public void eat(){
System.out.println("吃东西");
}
}
Dog.java
public class Dog extends Pet{
public void eat(){ //对eat方法进行了重写
System.out.println("小狗吃骨头....");
// 健康值加20 亲密度加10
this.setHealth(this.getHealth()+20);
this.setLove(this.getLove()+10);
}
}
Cat.java
public class Cat extends Pet{
public void eat(){ //对eat方法进行了重写
System.out.println("小猫吃鱼....");
// 健康值加15 亲密度加12
this.setHealth(this.getHealth()+15);
this.setLove(this.getLove()+12);
}
}
Penguin.java
public class Penguin extends Pet {
// 没有对eat方法进行重写,执行的是从父类Pet那里继承来的方法。
// public void eat() {
// System.out.println("企鹅吃鱼....");
// this.setHealth(this.getHealth() + 18);
// this.setLove(this.getLove() + 14);
// }
}
Test.java (测试类)
public class Test {
public static void main(String[] args) {
Lady l = new Lady();
Dog d = new Dog();
l.feed(d);
Cat c = new Cat();
l.feed(c);
Penguin p = new Penguin();
l.feed(p);
}
}
运行结果是:
2、使用父类作为方法的返回值。
Lady.java
public class Lady {
public Pet type(String type) {
Pet pet;
if (type.equals("dog")) {
pet = new Dog();
} else if (type.equals("cat")) {
pet = new Cat();
} else if (type.equals("penguin")) {
pet = new Penguin();
} else {
pet = null;
}
return pet;
}
}
Test.java
public class Test {
public static void main(String[] args) {
Lady l = new Lady();
Pet p;
p = l.type("dog");
p.eat();
p = l.type("cat");
p.eat();
p = l.type("penguin");
p.eat();
}
}