簡體   English   中英

靜態方法的繼承和多態

[英]Static methods inheritance and polymorphism

繼承和多態如何與靜態方法一起工作? 有人可以解釋這里應該有什么適當的輸出以及它是如何得出的嗎?

class A { public static int get() { return 17; } }
class B extends A { public static int get() { return 42; } }


 Main
 A x = new B();
 x.get();

錯誤消息,

類型A的靜態方法get()應該以靜態方式訪問

我想我知道如何以靜態方式訪問它,但這是來自類的一個問題,其隱含着將返回一個或另一個值

在我們的程序中,我們具有類定義:

class A { public static int get() { return 17; } }
class B extends A { public static int get() { return 42; } }

在其他地方,我們聲明A x = new B();

調用x.get()返回什么數字?

調用將返回int17

static方法不會被繼承。

static方法根據調用它們的表達式的類型進行綁定和調用。

所以

x.get();

其中xA類型調用A的實現。 還要注意, static方法不需要調用實例。

這些也將起作用。

((A) null).get();
A.get();
...
public static A someMethod() {}
...
someMethod().get();

您收到的消息是警告,而不是錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM