JAVA子类函数_如何使用子类或超类定义Java函数的返回类型和参数?

例如,如果我有类似的功能

public List sort(ArrayList list) {...}

我的同学告诉我,我们应该使用List作为返回类型,因为返回类型应该尽可能广泛.他的理由是,如果我们当前返回一个ArrayList,我们可以更改为返回LinkedList或其他类型.它增加了灵活性.

但是我们收到的函数参数应尽可能窄.这是因为我们可能需要在sort函数中使用一些只由ArrayList实现的函数.

所以我的问题是:是否有任何广泛接受的指南/最佳实践建议函数的形式参数应尽可能窄?如果不是,反对的主要论点是什么?

=============================================

只是为了澄清这一点.

public List sort(ArrayList list) {...}

这只是一个例子,List和ArrayList可以被任何其他Super Class和SubClass替换.我们假设SubClass中只存在一些函数.

public SuperClass sort(SubClass object) {...}

解决方法:

大多数程序员都会同意,尽可能广泛的回报是你所描述的好事(由于灵活性因素).

我相信很多人会争辩说,尽可能广泛的指南也适用于参数,因为它允许从更广泛的范围使用你的函数:如果在代码中的某个地方有一个LinkedList对象,那个地方就能够调用你的方法(如果它需要排序)如果它是用List类型的参数定义的,但是如果它是用ArrayList类型的参数定义的话,它将无法调用你的方法.

所以一般来说,尽可能广泛是一个很好的指导方针.当然,由您(作为方法的作者)决定“尽可能广泛”对您来说意味着什么.具体来说,如果你可以使它更广泛但有一些成本(例如,更复杂的实现),你必须决定是否愿意接受这种额外的复杂性(更高的错误机会)以换取更广泛的适用性.

标签:java,arraylist,inheritance,generics,list

来源: https://codeday.me/bug/20190522/1153184.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值