java中靜態方法和非靜態方法覆蓋的區別

2021-04-01 20:22:34 字數 2763 閱讀 6204

首先我們提供兩個類,基類為

parent

,派生類為

child

。在parent

中我們提供兩個方法,乙個是靜態方法

staticmethod(),

乙個是非靜態方法

nonstaticmethod()

。在child

類中我們覆蓋著兩個方法。

class parent  

public static void staticmethod() 

}class child extends parent 

public static void staticmethod()   }在

test

類中我們分別使用

parent p1 = new parent(),parent p2 = new child(),child c = new child()

得到三個例項,並分別呼叫靜態方法和非靜態方法,我們來看程式的執行結果

在test

類中我們分別使用

parent p1 = new parent(),parent p2 = new child(),child c = new child()

得到三個例項,並分別呼叫靜態方法和非靜態方法,我們來看程式的執行結果

public class test

}程式的執行結果為:

parent.static: parent's static method is called

p1.static: parent's static method is called

p2.static: parent's static method is called

p1.nonstatic: parent's non-static method is calle

p2.nonstatic: child's non-static method is called

child.static: child's static method is called

c.static: child's static method is called

c.nonstatic: child's non-static method is called

值得注意的是

p2實際上是乙個

child

的型別的引用,然而在呼叫靜態方法的時候,它執行的卻是父類的靜態方法,而不是

child

的靜態方法,而呼叫

p2的非靜態方法的時候執行的是

child

的非靜態方法,為什麼呢?原因是靜態方法是在編譯的時候把靜態方法和類的引用型別進行匹配,而不是在執行的時候和類引用進行匹配。因此我們得出結論:當我們在子類中建立的靜態方法,它並不會覆蓋父類中相同名字的靜態方法。

首先我們提供兩個類,基類為

parent

,派生類為

child

。在parent

中我們提供兩個方法,乙個是靜態方法

staticmethod(),

乙個是非靜態方法

nonstaticmethod()

。在child

類中我們覆蓋著兩個方法。

class parent  

public static void staticmethod() 

}class child extends parent 

public static void staticmethod()   }在

test

類中我們分別使用

parent p1 = new parent(),parent p2 = new child(),child c = new child()

得到三個例項,並分別呼叫靜態方法和非靜態方法,我們來看程式的執行結果

在test

類中我們分別使用

parent p1 = new parent(),parent p2 = new child(),child c = new child()

得到三個例項,並分別呼叫靜態方法和非靜態方法,我們來看程式的執行結果

public class test

}程式的執行結果為:

parent.static: parent's static method is called

p1.static: parent's static method is called

p2.static: parent's static method is called

p1.nonstatic: parent's non-static method is calle

p2.nonstatic: child's non-static method is called

child.static: child's static method is called

c.static: child's static method is called

c.nonstatic: child's non-static method is called

值得注意的是

p2實際上是乙個

child

的型別的引用,然而在呼叫靜態方法的時候,它執行的卻是父類的靜態方法,而不是

child

的靜態方法,而呼叫

p2的非靜態方法的時候執行的是

child

的非靜態方法,為什麼呢?原因是靜態方法是在編譯的時候把靜態方法和類的引用型別進行匹配,而不是在執行的時候和類引用進行匹配。因此我們得出結論:當我們在子類中建立的靜態方法,它並不會覆蓋父類中相同名字的靜態方法。

Java中靜態方法和非靜態方法的區別

靜態方法和非靜態方法的區別總結如下 1 靜態方法屬於類所有,類例項化前即可使用 2 非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員 3 因為靜態方法在類例項化前就可以使用,而類中的非靜態變數必須在例項化之後才能分配記憶體 4 static內部只能出現static變數和其他stati...

靜態方法和非靜態方法

首先,兩者本質上的區別是 靜態方法是在類中使用staitc修飾的方法,在類定義的時候已經被裝載和分配。而非靜態方法是不加static關鍵字的方法,在類定義時沒有占用記憶體,只有在類被例項化成物件時,物件呼叫該方法才被分配記憶體。其次,靜態方法中只能呼叫靜態成員或者方法,不能呼叫非靜態方法或者非靜態成...

靜態方法和非靜態方法

靜態方法和非靜態方法 其次,靜態方法中只能呼叫靜態成員或者方法,不能呼叫非靜態方法或者非靜態成員,而非靜態方法既可以呼叫靜態成員或者方法又可以呼叫其他的非靜態成員或者方法。例子1 靜態方法的main方法訪問類中的非靜態成員方法。class test public static void main s...