Java 的多态
Posted fsy15767366954
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 的多态相关的知识,希望对你有一定的参考价值。
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(); } }
以上是关于Java 的多态的主要内容,如果未能解决你的问题,请参考以下文章