[英]are static and non static overloads each other
這兩個功能是否過載
class yogi{
public static void fun(){
System.out.println("Fun");
}
public void fun(int a,int b){
System.out.println("int");
}
}
是的,那些是超載。 來自JLS 8.4.9 :
如果一個類的兩個方法(無論是在同一個類中聲明,還是由一個類繼承,或者一個是聲明的,一個是繼承的)都具有相同的名稱,但簽名不是覆蓋等效的,那么方法名稱就是超載。
對於靜態和實例方法具有相同名稱是一個好主意是相當罕見的(IMO),但它完全有效。
有趣的是,這可能會導致重載解析出現問題,因為即使沒有實例調用方法,也會包含方法。 例如:
public class Test {
public void foo(String x) {
}
public static void foo(Object x) {
}
public static void bar() {
foo(""); // Error
}
}
規范本來可以設計成這樣就好了(並調用靜態方法)但是它是一個錯誤:
Test.java:9: error: non-static method foo(String) cannot be referenced
from a static context
foo("");
^
我想是的。 他們重載方法名稱“fun”。
關於重載的一些好處可以在這里找到
“方法重載也稱為靜態多態。
注意事項:
靜態多態性也稱為編譯時綁定或早期綁定。
2.靜態綁定在編譯時發生。 方法重載是靜態綁定的一個例子,其中方法調用與其定義的綁定發生在編譯時。“
例如,下面的代碼給出了編譯時錯誤:類型中的重復方法fun(int,int)...
public static void fun(int a, int b) {
System.out.println("int");
}
public void fun(int a, int b) {
System.out.println("int");
}
從編譯時綁定的角度來看,實例方法和靜態方法不能分開,因為靜態方法也可以在實例變量上調用,而不僅僅是類引用。 並且編譯器必須明確地解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.