多态的实现
多态的实现步骤:
(1)编写父类
(2)编写子类,子类重写父类方法
(3)运行时,使用父类的类型、子类的对象
Pet pet = new Dog();
实现多态的两种形式:
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
1.使用父类作为方法形参实现多态
以下实现一个主人喂食宠物例子:
(1)新建宠物类Pet,是一个抽象类
/**
-
宠物类,狗狗和企鹅的父类
*/
public abstract class Pet {/**
- 抽象方法eat(),负责宠物吃饭功能。
*/
public abstract void eat();
- 抽象方法eat(),负责宠物吃饭功能。
}
(2)新建狗狗类,继承Pet,并实现吃食方法eat()
/**
-
狗狗类,宠物的子类
*/
public class Dog extends Pet {/**
- 实现吃食方法。
/
public void eat() {
System.out.println(“狗狗吃饭中!”);
}
}
(3)新建企鹅类,继承Pet,并实现吃食方法eat()
/*
- 实现吃食方法。
-
企鹅类,宠物的子类
/
public class Penguin extends Pet {
/*- 实现吃食方法。
/
public void eat() {
System.out.println(“企鹅吃饭中!”);
}
}
(4)新建主人类,负责给宠物喂食,将抽象类Pet作为方法形参
/*
- 实现吃食方法。
-
主人类
/
public class Master {
/*- 主人给宠物喂食
/
public void feed(Pet pet) {
pet.eat();
}
}
(5)新建测试类Test,执行主人的喂食方法
/*
- 主人给宠物喂食
-
测试类,给宠物喂食
*/
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
Penguin pgn = new Penguin();Master master=new Master(); master.feed(dog);//主人给狗狗喂食 master.feed(pgn);//主人给企鹅喂食
}
}
运行测试类Test,输出结果为:
狗狗吃饭中!
企鹅吃饭中!
2.使用父类作为方法返回值实现多态
以下继续实现一个主人领养宠物例子:
(1)在主人类中添加领养宠物的方法
/**
- 主人领养宠物
- @param typeId 宠物编号
- @return
*/
public Pet getPet(int typeId){
Pet pet=null;
if(typeId1){
pet= new Dog();
}else if(typeId2){
pet = new Penguin();
}
return pet;
}
(2)新建测试类Test2,根据控制台选择,领养宠物
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
System.out.println(“欢迎您来到宠物店!”);
System.out.print(“请选择要领养的宠物类型:(1、狗狗 2、企鹅)”);
Scanner input = new Scanner(System.in);
//获取选择的宠物类型
int typeId=input.nextInt();
//领养宠物
Master master=new Master();
Pet pet=master.getPet(typeId);
if(pet!=null){
System.out.println(“领养成功!”);
//开始喂食
master.feed(pet);
}else{
System.out.println(“对不起,没有此类型的宠物,领养失败”);
}
}
}
运行测试类Test2: