預設方法

預設方法

  • 可以在介面中使用,以在不強制現有子類實現的情況下引入行為。
  • 可以由子類或子介面覆蓋。
  • 不允許覆蓋 java.lang.Object 類中的方法。
  • 如果一個實現多個介面的類,從每個介面繼承具有相同方法簽名的預設方法,那麼它必須覆蓋並提供它自己的介面,就像它們不是預設方法一樣(作為解析多重繼承的一部分)。
  • 儘管旨在在不破壞現有實現的情況下引入行為,但是現有的具有與新引入的預設方法具有相同方法簽名的靜態方法的子類仍將被破壞。但是,即使在超類中引入例項方法也是如此。

靜態方法

  • 可以在介面中使用,主要用於預設方法的實用方法。
  • 不能被子類或子介面覆蓋(對它們隱藏)。然而,即使是現在的靜態方法也是如此,每個類或介面都可以擁有自己的類。
  • 不允許覆蓋 java.lang.Object 類中的例項方法(目前也是子類的情況)。

下面是一個總結子類和超類之間互動的表。

- SUPER_CLASS-INSTANCE-METHOD SUPER_CLASS-STATIC-METHOD
SUB_CLASS-INSTANCE-METHOD 覆蓋 生成 -編譯時誤差
SUB_CLASS-STATIC-METHOD 生成 -編譯時誤差 隱藏

下面是一個總結介面和實現類之間互動的表。

- INTERFACE-DEFAULT-METHOD INTERFACE-STATIC-METHOD
IMPL_CLASS-INSTANCE-METHOD 覆蓋 隱藏
IMPL_CLASS-STATIC-METHOD 生成 -編譯時誤差 隱藏

參考文獻: