[英]Overriding and overloading in Java. What does changing the visibility do?
我想知道这是否正确以及对每个问题的一些解释:
一世。 public int compute(double x)
二. public void compute(double x)
三. public void compute(int x)
四. public void compute()
v. private void compute()
方法的可见性不是其签名的一部分。 您不能使用具有不同可见性的另一个方法重载一个方法。 当扩展一个类时,你可以在覆盖它时使一个方法更加可见(例如,将一个protected
方法提升为public
)。
返回类型也不是签名的一部分,并且您不能使用具有不同返回类型的另一个方法重载一个方法。 但是,您可以在扩展类时专门化返回值。 例如,如果基类有一个方法public Object getSomething()
,您可以在扩展类中专门化返回值 - 例如, public String getSomething()
。
如果这些方法都在同一个class,那你就是重载了。 重载时,可以有同名的函数,但必须有不同的arguments。
//an example of over-loading
public void foo(){...}
public void foo(String str){...};
但是具有相同名称的方法具有不同的返回类型不符合重载的条件。
//an example of what is NOT overloading and will not compile
public void foo(){...}
public String foo(){...}
编译器无法判断调用哪个方法!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.