【发布时间】:2010-10-11 19:18:50
【问题描述】:
所以我是一名 java 程序员,我知道函数重载意味着什么。此外,我用不同类型的参数重载了一个函数,并且可以用更少和更大的参数重载。
我在一次采访中被问到这个问题。我真的不知道这是否有任何好处或面试官在这里得到了什么。它有什么性能优势吗?有什么想法吗?
谢谢。
【问题讨论】:
标签: oop overloading
所以我是一名 java 程序员,我知道函数重载意味着什么。此外,我用不同类型的参数重载了一个函数,并且可以用更少和更大的参数重载。
我在一次采访中被问到这个问题。我真的不知道这是否有任何好处或面试官在这里得到了什么。它有什么性能优势吗?有什么想法吗?
谢谢。
【问题讨论】:
标签: oop overloading
它是关于通过允许使用默认值调用函数来提供灵活的接口。某些语言通过可选参数允许这样做,但您可以通过重载实现或多或少相同。
【讨论】:
我以前用它来提供向后兼容性。
【讨论】:
它提供了灵活性 例如
假设您有一个通常不需要更改的属性,除非在特殊情况下您可以简单地编写一个重载方法来接受特殊的 curcumstance,而不是要求它被默认或每次都需要在常规方法中设置它
例如
公共无效connectToDatabase(字符串连接字符串) { //一些命令 }
public void connectToDatabase(string connString, string username, string password) { //一些命令 }
【讨论】:
面试官可能一直在暗示依赖注入,可以通过方法或构造函数来完成。
【讨论】:
绝对是为了向后兼容。此外,如果很少使用非默认值传递(超过 2 个)参数,那么创建重载方法很有用。
【讨论】:
如果一种语言不支持重载,那么执行速度会更快。因为程序将不必使用/跟踪/管理重载机制。
但是如果语言支持重载,你应该使用它们!以下是性能方面的原因:
传递参数的成本很高。因为他们需要内存空间和访问它们。因此,如果您发送 2 个相同数据类型的参数,它实际上会比您可能传递 1 个参数要慢。
参数不同,你没有出路。
由于您至少必须为最长的参数列表创建函数,因此您必须检查大量空/空值,并根据它们的条件来实现更少或不同参数的算法。
有些参数实际上是其他参数的属性。您可以将它们发送到数组或数组引用中。就像您可能想要打印一些东西,并且您可能有一些常见的参数,例如颜色、边框等。你真的不需要为它们制作单个参数。
您还应该计算每个版本的使用次数。您可以合并可能具有较低频率的那些。不要碰最忙的!
这么多实用的理论;)
【讨论】: