多态-----面向对象重要思想之一

多态是继封装继承之后,面向对象的第三大特性。

1、引入多态

白话来说,多态就是同一个行为具有多个不同表现形态

eg:对于猫与狗来说,都有相同的行为“吃”。但是猫吃鱼,狗啃骨头。

 2、实现多态的条件

(1)必须要有继承关系;【完成向上转型

(2)子类必须要对父类中的方法进行重写;

(3)通过父类的引用调用重写的方法; 【发生动态绑定

要实现多态,三个条件缺一不可。

3、向上转型和向下转型

3-1 向上转型

就是类型由小变大。 即创建一个子类对象,将其当作父类来使用。

语法格式:父类类型 对象名 = new 子类类型();

方法一:直接赋值

Animal5 cat5 = new Cat5("猫猫",2);
Animal5 dog5 = new Dog5("狗狗",1);

 方法二:方法传参

 方法三:方法的返回值

向上转型优点:代码实现更简单灵活;缺点:不能调用到子类特有的方法。

3-2 向下转型

即将父类对象转换到子类对象。

向下转型不安全,转换失败的话,运行时就会异常。

为了提高向下转型的安全性,引入instanceof

eg: 向下转型之后可以 调用子类自己独特的方法。

 4、重写

也称覆写,覆盖。  子类重写父类方法

        重写是子类对父类中 非静态,非private修饰,非final修饰,非构造方法等的其他方法进行重写。重写的好处:子类根据自己的需要写出特定的行为。

-> 重写的规则:

(1)子类重写父类方法时, 方法的修饰符,返回值类型,方法名,参数列表(个数,类型,顺序)都必须一样;

(2)被重写的方法返回值类型可以不同,但必须是具有父子关系的;

(3)子类的访问修饰符 >= 父类的修饰符

(4)父类中被static, private修饰的方法 以及 构造方法都不能被重写

-> 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

5、动态绑定和静态绑定

-> 动态绑定(后期绑定/晚绑定):在编译时,调用父类自己的方法,不能确定方法的具体行为;但在程序运行时,程序发生动态绑定,调用子类自己的方法。

-> 静态绑定(前期绑定/早绑定):在编译时,根据用户所传递实参类型确定了具体调用哪个方法。eg:方法的重载。

6、多态的优缺点

多态的优点体现在:可以使我们的程序编写的更简单,可以提高可维护性,并有良好的扩展性。

缺点:无法直接访问子类特有的成员。从上面的多态的好处,可以看到我们可以使用父类的参数代替了某个子类的参数,从而达到程序的扩展!但是对于某个子类有些独有的功能方法时,此时我们的多态的写法就无法访问子类独有功能了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值