1.什么是多态?
多态是一种面向对象的编程思想
概念:定义同一个父类型的不同引用变量,用来接收对应子类型的相关实例对象,从而通过执行方法,实现一个方法演变出不同场景的操作,称之为多态
它产生的优点如下:
便于代码之间的替换
扩充起代码来简单快捷,简化编程流程
运用多态写出的代码,运行灵活,更好的简化无效重复代码,使得代码可读性更好
2.多态使用的前提条件
多态是建立在有继承关系存在的基础上的
3.多态的代码实现
使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。
//定义动物类接口 public interface Animal { void shout(); } /** * 定义小狗类实现动物类的shout方法 * @author asus * */ class Dog implements Animal { @Override public void shout() { System.out.println("小狗汪汪叫~.~"); } } /** * 定义小狗类实现动物类的shout方法 * @author asus * */ class Dog implements Animal { @Override public void shout() { System.out.println("小狗汪汪叫~.~"); } } /* * 定义一个测试类 * 一键运行,搞定多态 */ public class Test { public static void main(String[] args) { //定义Animal的变量animal1 用来接受Dog类的实例对象 Animal animal1 = new Dog(); //定义Animal的变量animal2 用来接受Cat类的实例对象 Animal animal2 = new Cat(); //分别传入参数animal1和animal2,运行,见证奇迹吧 AnimalShout(animal1); AnimalShout(animal2); System.out.println("很简单吧,多态 is just so so"); } //定义静态的动物叫声方法AnimalShout(动物声音识别器) public static void AnimalShout(Animal animal){ //根据传入的参数去选择调用对应的类型shout的方法 animal.shout(); } }
运行一下,你就知道啦!!!
4.多态涉及的类型转换
向上转型:子类型转换成父类型
特点:
父类声明指向子类对象
调用的是子类重写父类的方法
不能调用子类特有的方法(不通过继承而新增的方法)
向下转型:父类型转换为子类型
特点:
多个子类型对象可赋值给同一个父类型变量,但同一个子类型变量只能接收对应子类型的父类实例
如果类型转换错误,会抛异常,因此向下转型之前,通常需要先做一次类型判断
类型判断
对象 (或者对象引用变量)instanceof 类(或接口)
codeing.....
//定义静态的动物叫声方法AnimalShout(动物声音识别器) public static void AnimalShout(Animal animal){ //Animal类型的animal向下转型为Cat类型并赋值给cat if(animal instanceof Cat){ Cat cat = (Cat)animal; //根据传入的参数去选择调用对应的类型shout的方法 animal.shout(); } }
笨鸟先飞,捷足先登,就算别人不相信你,你也要相信你自己!