接口中的所有變量都是公共靜態的和最終的。在接口中嵌套的類是隱式靜態還是最終的?
所以,如果我聲明一個接口內嵌套的類,它也會變成靜態的和最終的?
Interface I
{
class c
{
static void m(){ }
}
}
接口中的所有變量都是公共靜態的和最終的。在接口中嵌套的類是隱式靜態還是最終的?
所以,如果我聲明一個接口內嵌套的類,它也會變成靜態的和最終的?
Interface I
{
class c
{
static void m(){ }
}
}
讓我們來了解一下。讓我們創建結構,如:
interface Interface{
class Foo{}
}
現在我們可以測試:
System.out.println("static: " + Modifier.isStatic(Interface.Foo.class.getModifiers()));
System.out.println("final: " + Modifier.isFinal(Interface.Foo.class.getModifiers()));
它打印:
static: true
final: false
所以嵌套類默認靜態的,但不是最終的。
我們也可以通過在我們的界面中添加class Bar extends Foo{}
來確認。 final
類不能擴展,但由於這些代碼編譯得很好,這意味着Foo
不是最終的。
嵌套在接口內部的類的行爲類似於嵌套在類內部的類,因爲您不需要擁有外部類的實例來構造嵌套類的實例。根據Java Language Specification, §8.1.3:
8.1.3 內部類和實例圍
[...]甲構件類的接口的是隱式靜態的(§9.5),所以從不認爲是一種內類。
但是,這些類不是最終的,除非您明確指定它們。這是有道理的,因爲實現接口的類可能需要擴展接口內定義的嵌套類的機會。
我在問接口內部的類是靜態的嗎? – SHAMBANNA
爲什麼它不是最後的 – SHAMBANNA
如果它是內在的,它就是靜態的。你的意思是'嵌套'類。 – EJP