您的位置:首页 > 编程语言 > Java开发

Java 的多态

2019-04-23 23:33 441 查看

1    多态的概念

 多态(?)

 可以理解为多种状态/多种形态

同一事物,由于条件不同,产生的结果不同

 

程序中的多态

同一引用类型,使用不同的实例而执行结果不同的。

同:同一个类型,一般指父类。

不同:不同的子类实例

不同:针对同一方法执行的结果不同

 

package cn.sxt05;

public class Test01 {
public static void main(String[] args) {

// 多态
// 同一引用类型
Pet pet = null;
// 父类引用 引用 子类对象
pet = new Dog("二狗",100,0,"土狗");
// 呈现多态
pet.eat();

pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);
// 呈现多态
pet.eat();
}
}

 

实现多态的步骤

[1] 编写父类

[2] 编写子类,子类一定要重写/实现父类的方法

[3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())

1。2   多态的实现形式

 

// 多态
// 同一引用类型
Pet pet = null;
// 父类引用 引用 子类对象
pet = new Dog("二狗",100,0,"土狗");
// 呈现多态
pet.eat();

 

pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。

 

 

   父类作为方法形参实现多态

 

public void feed(Pet pet) {
System.out.println(this.getName() + "正在喂" + pet.getName());
pet.eat();
}

 

父类作为方法的返回值实现多态

 

public Pet adoptPet(int type) {
Pet pet = null;
if(1 == type) {
pet = new Dog();
}else if(2 == type) {
pet = new Penguin();
}else if(3 == type){
pet = new Cat();
}
return pet;
}

 

1.3 类型转换

 

在多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换。

 

在引用数据类型转换过程中,

 

自动类型转换也称向上类型转换。子类可以自动转换成父类。

Pet pet = null;
pet = new Dog();

强制类型转换也称向下类型转换。父类可以强制转换成子类。

 

一般而言,需要判断父类对象的真实类型,用instanceof关键字

 

如果要调用子类特有的方法时,一定要强制类型转换,通过instanceof鉴别具体类型

public void play(Pet pet) {
if(pet instanceof Dog) {
Dog dog = (Dog) pet;
dog.catchFlyDisc();
}else if(pet instanceof Penguin) {
Penguin penguin = (Penguin) pet;
penguin.swimming();
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: