java 继承与多态->方法调用优先级

前言

多态是java的一大特征,继承是多态的基础,下面简单的展现了多态的特性。

        我们首先需要了解的知识是:1.方法调用优先级:this.show(object)  ->  super.show(object)  ->  this.show(super(object))                                                                     ->  super.show(super(object))                                                                     

                                                               2.Parent p2 = new Child();        创建父类Parent引用p2,指向子类Child对象。(向上转型,这样父类就能调用子类里重写父类的方法)

方法调用优先级解释:

        对象调用方法时有时候会得出意向不到的结果,这是对java方法调用优先级不够了解,上面的顺序就是java方法调用优先级。

        首先    找到本类参数列表为object对象的方法  ->  找到父类参数列表为object对象的方法  ->  找到本类参数列表为object的父类对象的方法   ->  找到父类参数列表为object的父类对象的方法   (->代表上个方式没找到用下个方式找,找到则停止)

public class Test{     
	   public static void main(String[] args){
	      Parent p1 = new Parent();
	      Parent p2 = new Child();//向上转型
	      Child c = new Child();
	      System.out.println(p1.show(p1));    
	      System.out.println(p2.show(c));    
	      System.out.println(c.show(c));    
	   }
}


class Parent{
    public String show(Parent obj){
           return ("This is Parent!!!");
    }
} 


class Child extends Parent{
    public String show(Parent obj){
           return ("This is Parent and Child!!!");
    }

    public String show(Child  obj){
           return ("This is Child!!!");
    }
}


输出结果:This is Parent!!!                         调用过程:    p1.show(p1)  也就是  this.show(object)调用成功               

                  This is Parent and Child!!!                               p2.show(c)    前面调用失败一直到  ->  this.show(super(object))                                                                                                                  也就是p2.show(p1)     (p1是参数类型为Parent的父类对象)

                                                                                                                也就是找到了子类的show(Child  obj)方法,但父类没有此方法                                                                                                             无法调用,跳到子类的show(Parent obj)方法

                  This is Child!!!                                                  c.show(c)      也就是  this.show(object)调用成功

注意事项

        虽然整体方法调用比较简单,但需要特别注意像p2.show(c)虽然是调用参数类型为Child的子类方法找到了,但是由于父类没有参数类型为Child的方法是无法调用的(父类无法调用子类自己的方法,只能调用子类重写的方法)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值