java -----多态:父类引用指向子类对象

生活中的人物视角

程序中的多态

概念:父类引用指向子类对象,从而产生多种形态

一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定

比如:dog继承了animal

 

怎么来理解这句代码的意思呢?

举一个例子:

short s = 10;

int num = s;

这两行代码的意思是:创建了个s变量,short类型的占2个字节,然后我们把s这个变量传递给了num,num这里是int类型的,占了4个字节 ,两行代码是可以正常运行的

我们想通过这两行代码表达的意思是:我们从小范围的数据传递给大范围的数据是不会出错的

这里的Animal是dog的父类,范围要比dog的范围大,所以这句代码是可以运行的

 

父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。

 

如果子类重写了父类的方法,那么在调用方法时,调用的是子类的重写的方法:官方话:实际运行过程中,依旧遵循覆盖原则,如果子类覆盖了父类中的方法,则执行子类中覆盖后的方法,否则执行子类中的方法

 

多态的使用场景

 

场景一:使用父类作为方法形参实现多态

上面的省略的代码,都可以调用这么一块语句完成

 

场景二:使用父类作为方法的返回值实现多态,使方法可以返回不同的子类对象

 

 

向上转型(装箱):

Animal a = new Dog();

父类引用中保存真实的子类对象
 

把Dog转化成Animal

 

向下转型(拆箱):

比如我们用父类对象 创建了一个子类对象。父类对象只能调用父类的方法和对象以及子类中重写的方法,怎么办呢?我们想调用子类的对象

我们将a强转为子类对象,就可以调用子类的对象和方法了

 

向下转型的条件:先存在向上转型:Animal a = new Dog();才有后面的向下转型。向下转型必须转化为原来的类型

 

思考:在向下转型的时候如何判断出当前的类型呢?你怎么知道他原来的类型呢?这里就引出了Instance of关键字

引用 instance of 类型 // 返回布尔类型结果

 

总结:

父类引用指向子类的对象,从而产生多种形态。把子类当成父类来看

使用父类作为方法的形参,实现多态(喂养的方法)

使用父类作为方法返回值,实现多态(购买动物的方法)

 

Java多态的三个必要条件:

1、 继承

2、 子类重写父类方法

3、 父类引用指向子类对象

 

 

  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值