Java中多态的概念及应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解决方案:将父类作为参数传递实现多态,如下代码:
public abstract class Animal {
public abstract void Speaking(); }
public class Dog extends Animal {
public void Speaking() {
System.out.println("我们一起旺旺旺"); } }
Animal animal; if(type == 1) {
animal = new Dog(); ="snoopy"; } else if(type == 2) { animal = new Cat(); ="tom"; } else { animal = null; } return animal; } }
多态
多态: 多态是同一个行为具有多个不同表现形式或形态的能力。
实现多态的手段
(1)将父类作为参数进行传递。 (2)将父类作为返回值。
案例一:将父类作为参数传递(模拟人和动物打招呼)
首先看如下代码的缺陷:
public class Dog {
public void Speaking() {
System.out.println("我们一起旺旺旺"); } }
public class Cat {
public void Speaking() {
System.out.println("我们一起喵喵喵"); } }
public class People {
//人类给狗打招呼 public void SayHi(Dog dog) {
dog.Speaking(); } //人类给猫打招呼 public void SayHi(Cat cat) {
String name; }
public class Dog extends Animal { }
public class Cat extends Animal { }
public class People {
//父类作为返回值 public Animal OwnAnimal(int type) {
public class People {
//和动物玩游戏 public void Play(Animal animal) {
if(animal instanceof Dog) {
Dog dog = (Dog)animal; dog.CatchFlyDisc(); } if(animal instanceof Cat) { Cat cat = (Cat)animal; cat.HideAndSeek(); } } }
此处缺点在于,People中领养动物的方法,系统中有n中动物,就必须编写n个方法。
在main方法中的调用:
Scanner input = new Scanner(System.in); System.out.println("请输入您要领养的动物类型:(1-狗,2-猫)"); int type = input.nextInt(); People p = new People(); if(type == 1) {
p.OwnDog(); System.out.println("恭喜您领养了一只狗!"); } if(type == 2) { p.OwnCat(); System.out.println("恭喜您领养了一只猫!"); }
解决方案:将父类作为返回值实现多态,如下代码:
public class Animal {
//接飞盘游戏 public void CatchFlyDisc() {
System.out.println("我和主人正在玩接飞盘的游戏..."); } }
public class Cat extends Animal {
//玩捉迷藏游戏 public void HideAndSeek() {
System.out.println("我和主人正在玩捉迷藏的游戏"); } }
public class Cat extends Animal {
public void Speaking() {
System.out.println("我们一起喵喵喵"); } }
public class People {
//人类给所有动物打招呼 public void SayHi(Animal animal) {
cat.Speaking(); } }
此时有一个People(人)类,需要实现,和动物打招呼的方法,方法需要传递一个动物进来,那么此时系 统中有n种东西,在People类中就需要定义n个方法进行重载。 以下是main方法的调用测试:
Cat cat = new Cat(); Dog dog = new Dog(); People p = new People(); p.SayHi(cat); p.SayHi(dog);
此处传递一个动物到Play方法中,但是由于接飞盘和捉迷藏的方法并没有从父类重写,方法名不同,所 以在具体实现的时候必须要知道传递过来的animal到底是狗还是猫,可以使用instanceof来进行判断。
在main方法中的调用:
Animal animal = new Cat(); People p = new People(); p.Play(animal); //此时会调用Cat类中的HideAndSeek方法打印消息。
animal.Speaking(); } }
此时,People类中的SayHi方法接收父类作为参数,不管系统中有多少种动物,此时SayHi只用编写一 次,实现的多态的思想。 以下是main方法的调用测试:
Animal cat = new Cat(); Animal dog = new Dog(); People p = new People(); p.SayHi(cat); p.SayHi(dog);
案例三:instanceof的使用(模拟人和动物玩游戏,和狗 玩飞盘,和猫玩捉迷藏)
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例 。
看如下代码:
public clc class Dog extends Animal {
案例二:将父类作为返回值(模拟人领养动物)
首先看如下代码缺陷:
public class Dog {
String name; }
public class Cat {
String name; }
public class People {
//此处领养狗的方法 public Dog OwnDog() {
Dog dog = new Dog(); = "snoopy"; return dog; } //此处领养猫的方法 public Cat OwnCat() { Cat cat = new Cat(); = "tom"; return cat; } }
此时无论系统中有多少种动物,一个方法就可以搞定。
在main方法中的调用:
Scanner input = new Scanner(System.in); System.out.println("请输入您要领养的动物类型:(1-狗,2-猫)"); int type = input.nextInt(); People p = new People(); Animal animal = p.OwnAnimal(type); System.out.println("恭喜您领养动物成功!");
public abstract class Animal {
public abstract void Speaking(); }
public class Dog extends Animal {
public void Speaking() {
System.out.println("我们一起旺旺旺"); } }
Animal animal; if(type == 1) {
animal = new Dog(); ="snoopy"; } else if(type == 2) { animal = new Cat(); ="tom"; } else { animal = null; } return animal; } }
多态
多态: 多态是同一个行为具有多个不同表现形式或形态的能力。
实现多态的手段
(1)将父类作为参数进行传递。 (2)将父类作为返回值。
案例一:将父类作为参数传递(模拟人和动物打招呼)
首先看如下代码的缺陷:
public class Dog {
public void Speaking() {
System.out.println("我们一起旺旺旺"); } }
public class Cat {
public void Speaking() {
System.out.println("我们一起喵喵喵"); } }
public class People {
//人类给狗打招呼 public void SayHi(Dog dog) {
dog.Speaking(); } //人类给猫打招呼 public void SayHi(Cat cat) {
String name; }
public class Dog extends Animal { }
public class Cat extends Animal { }
public class People {
//父类作为返回值 public Animal OwnAnimal(int type) {
public class People {
//和动物玩游戏 public void Play(Animal animal) {
if(animal instanceof Dog) {
Dog dog = (Dog)animal; dog.CatchFlyDisc(); } if(animal instanceof Cat) { Cat cat = (Cat)animal; cat.HideAndSeek(); } } }
此处缺点在于,People中领养动物的方法,系统中有n中动物,就必须编写n个方法。
在main方法中的调用:
Scanner input = new Scanner(System.in); System.out.println("请输入您要领养的动物类型:(1-狗,2-猫)"); int type = input.nextInt(); People p = new People(); if(type == 1) {
p.OwnDog(); System.out.println("恭喜您领养了一只狗!"); } if(type == 2) { p.OwnCat(); System.out.println("恭喜您领养了一只猫!"); }
解决方案:将父类作为返回值实现多态,如下代码:
public class Animal {
//接飞盘游戏 public void CatchFlyDisc() {
System.out.println("我和主人正在玩接飞盘的游戏..."); } }
public class Cat extends Animal {
//玩捉迷藏游戏 public void HideAndSeek() {
System.out.println("我和主人正在玩捉迷藏的游戏"); } }
public class Cat extends Animal {
public void Speaking() {
System.out.println("我们一起喵喵喵"); } }
public class People {
//人类给所有动物打招呼 public void SayHi(Animal animal) {
cat.Speaking(); } }
此时有一个People(人)类,需要实现,和动物打招呼的方法,方法需要传递一个动物进来,那么此时系 统中有n种东西,在People类中就需要定义n个方法进行重载。 以下是main方法的调用测试:
Cat cat = new Cat(); Dog dog = new Dog(); People p = new People(); p.SayHi(cat); p.SayHi(dog);
此处传递一个动物到Play方法中,但是由于接飞盘和捉迷藏的方法并没有从父类重写,方法名不同,所 以在具体实现的时候必须要知道传递过来的animal到底是狗还是猫,可以使用instanceof来进行判断。
在main方法中的调用:
Animal animal = new Cat(); People p = new People(); p.Play(animal); //此时会调用Cat类中的HideAndSeek方法打印消息。
animal.Speaking(); } }
此时,People类中的SayHi方法接收父类作为参数,不管系统中有多少种动物,此时SayHi只用编写一 次,实现的多态的思想。 以下是main方法的调用测试:
Animal cat = new Cat(); Animal dog = new Dog(); People p = new People(); p.SayHi(cat); p.SayHi(dog);
案例三:instanceof的使用(模拟人和动物玩游戏,和狗 玩飞盘,和猫玩捉迷藏)
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例 。
看如下代码:
public clc class Dog extends Animal {
案例二:将父类作为返回值(模拟人领养动物)
首先看如下代码缺陷:
public class Dog {
String name; }
public class Cat {
String name; }
public class People {
//此处领养狗的方法 public Dog OwnDog() {
Dog dog = new Dog(); = "snoopy"; return dog; } //此处领养猫的方法 public Cat OwnCat() { Cat cat = new Cat(); = "tom"; return cat; } }
此时无论系统中有多少种动物,一个方法就可以搞定。
在main方法中的调用:
Scanner input = new Scanner(System.in); System.out.println("请输入您要领养的动物类型:(1-狗,2-猫)"); int type = input.nextInt(); People p = new People(); Animal animal = p.OwnAnimal(type); System.out.println("恭喜您领养动物成功!");