熬之滴水穿石:JAVA的世界(5)

                                17--多态

多态顾名思义就是多种表现方式,而真正理解多态还是需要从继承类开始梳理。在没运用多态编码时,须考虑引用类型与对象类型必须相符,但融入多态后引用与对象是不同的类型,也就是说引用多态其实引用类型是实际对象类型的父类,同时参数和返回值的类型都可以是多态。说到这里,其实我们已经接近泛型编码了。但是我想表达的不是这个,而是想把多态的用途和规则尽量描述明白些。说起多态运用最多的恐怕就是覆盖(overried),但是用使用覆盖还是须 1)注意参数和返回值必须与父类一致 2)保持方法权限的一致性,如果父类是public,子类也是public而不能改成private或其它类型。说到这里,我们可能还会想起一个重载(overload)的方法。重载虽然和多态扯不上太多的关系,但它还是具有很大的扩展性。重载则打破了覆盖在多态中的种种限制,强调一点重载是与多态没多大关联的。覆盖可以改变返回类型,改变参数类型,更改存取权限等。

说多态就必须说起抽象。抽象方法在父类定义,实际上抽象方法除了继承别无用处。但是在JAVA的底层有许多的抽象类。我们通常把继承抽象类的叫作实体类。我们不可以在非抽象的类中拥有抽象的方法。抽象方法最大的用途,其实就是给予一组子类执行方法的规则。达成的目标就是把父类的参数、方法、类型加到继承类的程序中去。看上去很以平常的方法,实际上却拥有永不枯竭的生命力。这是多态最大的魅力,在后来流行的控制反转,依赖注入的方法源头都是来之于这里这里就是叫做“多态”!

 

抽象的方法是没有内容的,它只是告诉继承的子类们可以实现多态了。子类用覆盖的方法去实现该抽象方法,记得以前看过一本书上面一个典故形容多态很是到位,说父类就像一个遥控器,父类的方法就是遥控器上的按钮,父类的方法一般都很少,子类也是一个遥控器,由于子类继承后根据用途实现的方法较多所以在遥控器上的按钮也很多。这里自然会让我们想起向上转型,向下转型的内容。是的,是的!其实就是这么一回事,如果我们的对象类型是子类,引用的确是父类,那么我们无法调用子类上的方法。我们要实现的话只能采取引用变量的类用确实存在的方法才能调用。

在JAVA中并不支持多重继承,因为多重继承会导致关联复杂度的出现。然而JAVA中自然有解决多重继承的问题了,那就是接口出现。这个接口的关键词interface,而这个接口则是非常纯粹的抽象接口。继承类用extend,继承接口用implements,最为关键的是接口可以采取多重继承的方式,你就可以继承超过一个以上的来源。这种方式在JAVA的多个框架广泛的运用,多态与接口是JAVA中最为重要的内容之一,真正掌握JAVA已不是难事了。

                                                        (未完待续........)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值