多态
一个对象多种形态,就称它为多态(父类型的引用指向子类型的对象)
一个表示自己的类,一个表示自己的父类
多态特点:
父类型的引用指向子类型的对象,表现的是子类的特征(把子类型的对象赋值给父类的对象)
ps:编译看左边,运行看右边(多态编译时先看父类,运行时是表现new出来的子类的特征)
而我们又为什么要是有多态呢?
首先讲下封装和继承:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面,他把实现的细节影藏起来了,比如你在java中去实现一个类,这个类中提供了一些功能方法,你只需要知道你需要传递什么样的参数,会达到什么样的效果,实现细节在类中定义好了(类似于一个保护罩,防止一个类被其他类随意访问,控制访问,隐藏信息跟实现细节,提高安全性,从而使得代码模块化)
而继承可以扩展已存在的代码模块,而目的就是为了代码重用。
而使用多态呢?
消除类型之间的耦合关系,可以分为一个一个的子模块,提高了代码的扩展性。是OOP原则的一个具体的实现
--------------------------------------------------------------------------------------------------------------------
instanceof关键字
在使用多态的时候,如果子类有父类没有的方法,先用instanceof关键字判断一下是否是指定的类,再用类强制类型转换(例:Dog dog = (Dog)anim),转换为父类
多态注意点(字段是不属于多态的)
例 Animal dog = new Dog();dog.name是使用Animal父类的,意思就是说,字段没有多态,只能调用字段前面对象类型的数据,编译时已经决定好了
实例
先创建一个多态,使用时,如果父类没有子类的方法,先将父类强制转换为子类,才能使用子类的方法(多态时,只能调用父类方法,想调用子类方法,得先将父类转换为子类)