理解向上转型,动态绑定和多态

目录

1.向上转型

1.概念:

2.代码示例:

2.动态绑定

3.方法重写

4.理解多态

5.一个"坑"


1.向上转型

1.概念:

        向上转型:父类引用指向一个子类的实例,这种写法称为向上转型.

2.代码示例:

向上转型发生的时机有以下三种:

        直接赋值

        方法传参

        方法返回

直接赋值的写法:

方法传参的写法:

        

方法返回的写法:

2.动态绑定

        当父类和子类中出现了同名的方法的时候,我们去调用这个方法会出现什么样的现场呢?直接上代码:

 我们可以发现,虽然 animal 和 cat 都是 Animal 的类型引用,但是 animal 指向的是 Anima 类型的实例,而 cat 指向的是 Cat 类型的实例;在针对 animal 和 cat 分别调用eat方法之后,会发现前者调用了父类的eat方法,而后者调用了子类的eat方法;

   因此,在java中,调用了某个类的方法,究竟是执行了那段代码(是父类方法的代码还是子类方法的代码),要看这个引用指向的是父类对象还是子类对象,而这个过程是程序运行时决定的(而不是编译期),因此称为动态绑定.

3.方法重写

针对上图的eat方法来说:子类实现了父类的同名方法,并且参数的类型以及参数的个数完全相同,这种情况称为方法重写(Override)

注意事项:

        1.区分好重写和重载(重载:方法名称相同,参数类型和参数个数不同)

        2.普通方法可以重写,但静态方法(被static修饰的方法)不能重写

        3.重写中子类的方法的访问权限不能低于父类的方法访问权限

        (访问权限:public>protected>default>private)

        4.重写的方法返回值的类型不一定和父类的方法相同(但最好写成相同的)

4.理解多态

        多态的含义:一个引用,能表现出多种不同的形态

        多态的条件:

                1.发生向上转型

                2.父类跟子类具有同名的覆盖方法

                3.通过父类引用调用这个重写的方法

        多态的优点:

                1.类调用者对类的使用成本进一步降低.

                2.降低代码的"圈复杂度"

                3.可扩展能力强

 当类的调用者在编写 drawMap 这个方法的时候, 参数类型为 Shape (父类), 此时在该方法内部并不知道, 也不关注当 前的 shape 引用指向的是哪个类型(哪个子类)的实例. 此时 shape 这个引用调用 draw 方法可能会有多种不同的表现 (和 shape 对应的实例相关), 这种行为就称为 多态.

5.一个"坑"

        在构造方法中调用重写的方法也会造成触发动态绑定,但最好不要这做,会产生难以发现的问题.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值