多态(超详细)

多态(超详细)

一:认识多态

(1)封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为

(2)多态

指对的多种形态,我们可以用new关键字去创建一个学生对象,把这个对象赋值给Student类型,就表示这个Student对象现在是学生形态,这也是我们以前创建对象的方式。有了多态以后,我们再创建对象的时候还可以把学生对象赋值给他的父类类型Person,这就表示这个学生对象现在是人的形态。此时学生对象就有了两种形态,一个是上面的学生形态Student s = new Student();还有一个就是人形态Person p = new Student();这就是多态。

(3)多态的应用场景

假设在学生管理系统中有三个角色,学生老师和管理员。每一个角色在使用系统前他都是需要注册账号的,注册账号在代码里面家设计就是一个regist方法干的事情,此时方法的形参写什么类型的比较好呢?如果写Student类型,Teacher和admin怎么处理?如果写Teacher类型,Student和admin怎么处理?要实现这个效果,在以前我们只能写三个注册方法,分别和老师学生管理员对应。但是这种方法很不好,甚至很愚蠢。如果现在再添加一个角色辅导员,是不是还要再添加一个方法?

我们现在要的是不是一个通用的注册方法?这个方法既能接收老师,有能接收学生和管理员。为了解决这个问题,我只能在形参写他们共同的父类Person,这样就可以解决刚刚的问题了。现在传递一个Student过去,就变成了Person p = new Student();就是我们刚刚说的多态,注册其他类型的对象也是一样的。而且更重要的是,如果说在方法里面我用对象调用其他的方法,只要子类重写了这个方法,多态还可以根据你传递对象的不同,调用不同类里面的方法。如果传递的是老师,调用的就是老师里面的show方法。

public void registry(Person p ) {
   
	p.show();
}

(4)什么是多态?

同类型的对象,表现出的不同形态。

(5)多态的表现形式?

父类类型 对象名称 = 子类对象。

(6)多态的前提?

1、有继承关系

2、有父类引用指向子类对象:Fu f = new Zi();父类引用指的就是=左边Fu类类型的变量,指向就是中间的=,子类对象就是=右边new 出来的这部分

3、有方法重写

public class Test {
   
    public static void main(String[] args) {
   
        Student student = new Student();
        student.setName("张三");
        student.setAge(23);
        Teacher teacher = new Teacher();
        teacher.setName("李四");
        teacher.setAge(24);
        Admin admin = new Admin();
        admin.setName("王五");
        admin.setAge(25);
        registry(student);
        registry(teacher);
        registry(admin);
    }
    public static void registry(Person person) {
   
        person.show();
    }
}
class Person {
   
    private String name;
    private int age;

    public void show() {
   
        System.out.println(name + "," + age);
    }
}
class Student extends Person{
   
    @Override
    public void show() {
   
        System.out.println("学生的星系为:" + getName() + getAge());
    }
}
class Teacher extends Person{
   
    @Override
    public void show() {
   
        System.out.println("老师的信息为:" + getName() + "," + getAge());
    }
}
class Admin extends Person{
   
    @Override
    public void show
  • 103
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值