在實作預設方法時,可能會將演算法定義為更小的流程,而這些流程不用公開,基於此需求,介面可以定義private方法,可被預設方法呼叫,然而不用加上default修飾。
介面沒有實作時,判斷方法來源時會單純許多,為介面定義預設實作,可引入更強大的威力,然而也引入更多的複雜度,這時就需留意採用的是哪個預設方法。
介面也可以被繼承,而抽象方法或預設方法都會繼承下來,子介面再以抽象方法重新定義父介面已定義的抽象方法,通常是為了文件化,這是常見的實踐(Practice),因為沒有實作,也就沒有辨別實作版本的問題。
若介面定義了預設方法,辨別實作版本時有許多需要注意的地方。例如,父介面的抽象方法,在子介面中可以用預設方法實作,父介面的預設方法,在子介面中可以被重新定義。
若父介面有個預設方法,子介面再度宣告與父介面相同的方法簽署,但沒有寫出default,也就是沒有方法實作,子介面就是重新定義該方法為抽象方法了。
若有兩個父介面定義了相同方法簽署的預設方法,就會引發衝突。例如,假設Part與Canvas介面都定義了default的draw方法,而Lego介面繼承Part、Canvas時,沒有重新定義draw,就會發生編譯錯誤。