关于多态的一些理解

多态是我们面向对象的三大特性之一,我们先来了解一下多态的概念,多态是同一个行为具有多个不同表现形式或形态的能力。多态简单来讲就是多种形态,当去完成某个行为时,不同的对象会出现不同的状态。

1、多态实现的条件

多态要满足以下几个条件:

1、必须要在继承的条件下

2、子类必须对方法进行重写

3、通过父类的引用调用重写的方法

多态的体现:在代码运行时,调用不同类的对象,会调用相应的类中的方法

在这里我们可以看到代码,发现我们一共创建了三个类,而在这三个类中,Father继承了Person,

son也继承了Person,接下来我们对两个类中继承下来的walk方法进行重写,紧接着就是从40行到43行里面,分别去引用两种类的对象,再去调用walk方法,最后我们可以看到结果,son走了一小步,而father却走了一大步,这就是多态的体现。

2、重写

重写也被称为覆盖,重写是子类对父类的非静态,非private和final修饰,非构造方法等实现过程进行重新编写,返回值和形参不能变,即外壳不变,核心重写。

首先我们要了解重写的规则:

1、方法的重写,首先必须是重写父类的方法,且原型必须一致:返回值类型 方法名 (参数列表)要完全一致

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

这里我对Person类中的walk方法进行了修改,将返回值的类型修改Person,对Son类中的walk方法返回值的类型修改成了Son,这样的话对方法的重写也没有报错

3、访问权限不能比父类重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为protected

4、父类被static、private修饰的方法、构造方法都不能被重写

5、重写的方法可以用@overrid注解俩显示指定,有了这个注解能帮我们进行一些合法性校验。

重写和重载的区别

重写和重载只有一个相同的点就是方法名相同

3、向上转型和向下转型

3.1、向上转型

向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。

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

Person是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换

这个就是向上转型,但这只是属于向上传参的一种叫直接传参

另外两种叫:方法传参,方法返回

这个就是方法传参了,当我们通过方法去调用不同类中的方法,去形成多态

如红色圈中所演示的一样,这就是方法返回,创建方法时返回类型是父类类型,通过引用子类对象,然后再调用方法walk,最后形成多态

向上转型的优点:让代码实现更简单灵活。

向上转型的缺点:不能调用子类特有的方法。

3.2、向下转型

当我们给son这个类中添加自己的方法时,当我们去调用父类去引用之类对象时,调用子类特有的方法时发生了报错

所以向上转型是不能调用子类特有的方法

当我们去通过父类去引用子类对象时,然后再强转成子类时,我们去调用子类特有的方法,就可以发现可以被调用

向下转型的缺点:向下转型用的很少,而且通常很不安全,所以一般是不建议用的。

既然这给向下转型这么危险,那么我们又可以怎么安全的去使用呢?

3.3、instanceof的使用

通过这个instanceof我们可以对son这个对象进行一个检验,检验它是否是Son这个类去引用的,如过引用真确,则返回true,否者则返回false

这样就可以进行成功的向下转型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值