目录
没有继承就没有多态
多态的引入
多态顾名思义有不同的形态:
举例:
- 下面就表示创建了一个 学生形态的学生对象s;
Student s=new Student();
- 下面就表示创建了一个 人形态的学生对象p:
Person p=new Student();
所以现在学生对象就有了两种形态
而第二行代码就是今天学的多态:
多态的实现可以将子类对象赋值给父类类型的变量
多态的应用场景
在之前没有学习多态时,我们如果要创建一个注册学生管理系统
假设系统中有三个角色,Student、Teacher、Administrator
每个角色在使用系统前都要先注册,注册是一个方法,如果要同时满足三个角色的注册是办不到的(只能单种对象实现)或是创建三个方法来满足要求,如果以后要新增角色的话,还需新增方法来实现,这样的实现方式显然是愚蠢的
因此我们需要一个通用的方法来满足不同的角色,
我们可以通过各类对象的共同的父类来作为形参
我们用下面实例来展现多态:
// 父类
public class Person {
// 属性
private String name;
private int age;
/* 无参有参构造方法
..........
*/
/*set和get方法
........
*/
// show方法
public void show(){
System.out.println(name+" ,"+age);
}
---------------------------------------------------
// 子类--Student
class Student extends Person {
@Override
public void show(){
System.out.println("学生的信息为"+getName()+" ,"+getAge());
}
}
// 子类--Teacher
class Teacher extends Person {
@Override
public void show() {
System.out.println("老师的信息为"+getName()+" ,"+getAge());
}
}
public class Test {
public static void main(String[] args) {
//创建学生对象
Student s = new Student();
s.setName("张三");
s.setAge(23);
// 调用方法---传入new Student()
sign(s);
// 创建老师对象
Teacher t = new Teacher();
t.setName("李四");
t.setAge(34);
// 调用方法---传入new Teacher()
sign(t);
}
// 目的:注册方法,使这个方法技能接受老师又能接受学生
// 只能把形参写成他们的父类Person
// 所以Person p=new Student()
//Person p=new Teacher()
public static void sign(Person p) {
p.show();//*这里使用的多态调用成员的特点下节笔记中展现*
}
}
控制台输出内容:
学生的信息为张三 ,23
老师的信息为李四 ,34
多态初步认识总结:
什么是多态:
同类型的对象,表现出不同的形态。
多态的表现形式:
父类类型 对象名=子类对象;
多态的前提:
- 有继承关系
- 有父类引用指向子类对象
- 有方法重写
多态的好处?
使用父类型作为参数,可接收所有子类对象
体现多态的扩展性与便利。