知识点概述
-
多态是同一个行为具有多个不同表现形式或形态的能力。就是同一个接口,使用不同的实例而执行不同操作
-
多态存在的三个必要条件
1、继承或实现
2、方法的重写
3、基类引用指向派生类对象,即父类引用指向子类对象 -
多态的格式
父类类型 变量名 = new 子类类型();
变量名.方法名();
知识背景
-
1967 年,英国计算机科学家克里斯托弗·斯特雷奇在他的讲义合集《编程语言中的基础概念》中,首次提出了特设多态和参数多态的概念。
-
1985 年,彼得·瓦格纳和卢卡·卡代利在论文中引入了术语“蕴含多态”(英语:inclusion polymorphism)来为子类型和继承 (计算机科学)建模。。不过子类型和继承本身在 1967 年就已经在Simula有对应的实现。
知识点详述(结合实例
- 多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术
- 我们在程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用在编程的时候并不确定,当处于运行期间才确定。就是这个引用变量究竟指向哪一个实例对象,在编译期间是不确定的,只有运行期才能确定,这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态,这就是多态。
- 详情(换种说法更容易理解:
允许将子类类型的指针赋值给父类类型的指针,把不同的子类对象都当作父类来看。比如你家有亲属结婚了,让你们家派个人来参加婚礼,邀请函写的是让你爸来,但是实际上你去了,或者你妹妹去了,这都是可以的,因为你们代表的是你爸,但是在你们去之前他们也不知道谁会去,只知道是你们家的人。可能是你爸爸,可能是你们家的其他人代表你爸参加。这就是多态。 - 案例:
定义动物父类:
package com.nz.pojo;
/**
* 先定义一个父类 --> 动物类
* 动物都有一个吃的行为属性
*/
public class Animal {
public void eat() {
System.out.println("动物它们都会吃东西!!!");
}
}
定义猫咪子类
package com.nz.pojo;
/**
* 定义猫类继承动物类,
* 随之重写里面的吃行为,因为猫也有吃的行为,但是猫喜欢吃罐头
*/
public class Cat extends Animal{
public void eat() {
System.out.println("小喵咪都喜欢吃鱼罐头!");
}
}