繁体   English   中英

Java 中的覆盖和重载。更改可见性有什么作用?

[英]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()

  1. 做方法一。 重载方法 ii.? 是/否...不,会导致错误
  2. 做方法一。 重载方法 iii.? 是/否...否,会导致错误
  3. 做方法一。 重载方法 iv.? 是/否...否
  4. 做方法iv。 重载方法 v.? 是/否...不,会导致错误吗?
  5. 做方法二。 重载方法 iii.? 是/否...是

方法的可见性不是其签名的一部分。 您不能使用具有不同可见性的另一个方法重载一个方法。 当扩展一个类时,你可以在覆盖它时使一个方法更加可见(例如,将一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM