java基础之多态

1.当父类引用指向子类引用时,调用一个覆盖了父类方法的引用,到底是调用子类里面的方法还是父类里面的方法呢?
继承关系:

public class Students extends user

父类里的方法

   public int manyage(int age){
      System.out.println("user function");
      return this.age*2;
   }

子类方法覆盖父类方法

    public int manyage(int age) {
        System.out.println("students function");
        return this.age*3;
    }

父类引用指向子类引用

user user=students;

调用方法:

 System.out.println("which function used:"+user.manyage(students.age));

结果
在这里插入图片描述
结论:当我们调用一个指向了子类对象的父类对象的多态方法时,执行的是子类对象里的方法,也就是说:
付给调用哪个方法,和参数的引用类型无关,和引用的实际指向的类型有关
于此相反的是:
重载调用哪个方法,和参数的引用类型相关,和引用实际指向的类型无关,原因在于重载本身就是在参数所指对象下面操作。当然和当前类型相关。
甚至是个null也可以,但是要用强制类型转换,告诉Java这个类型是什么,否则找不到一个唯一的方法去调用

        user user=null;
        user=students;
        System.out.println("which function used:"+user.manyage(students.age));

在这里插入图片描述
重载方法的调用就是只和参数类型类型,不管是基础类型还是自定义类型;如果调用的时候参数类型没有完全匹配,就按照继承关系往下撸:就是从继承往回找,
举例:

继承关系:

public 2 Students extends 1
public 3 Students extends 2
public 4 Students extends 3

若以4为参数被调用,但是重载方法里没有以4为参数的方法,那就会把3作为参数,如还是没有就以2为参数,依次往回;

总结:
多态分为:
静态多态:重载,以参数类型进行区别
动态多态:覆盖,以继承关系进行区别

重载的调用只与参数类型有关,与参数的引用实际指向的类型无关
覆盖的调用与引用实际指向的类型有关,与引用本身的类型无关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值