なぜJava 8のインターフェイスに過負荷デフォルトインタフェースメソッドJavaで8
0
A
答えて
2
質問(「なぜJava 8のインターフェイスでデフォルトのメソッドをオーバーロードすることはできませんでの仮定をデフォルトのメソッドをオーバーロードすることはできません")は真実ではありません。インターフェイスのデフォルトメソッドをオーバーロードすることは完全に可能です。たとえば、うまくコンパイルする次のコードを検討してください。
public interface SomeInterface {
default void print(String s) {
System.out.println(s);
}
}
public class SomeClass implements SomeInterface {
/**
* Note the this overloads {@link SomeInterface#print(String)},
* not overrides it!
*/
public void print(int i) {
System.out.println(i);
}
}
+0
ありがとうMureinik。議論を終わらせる。コンパイルエラーが発生したIDEの問題がありました。 パッケージjava8Interface; @FunctionalInterface パブリックインターフェイスMyInterface { \t \tデフォルトのボイドディスプレイ(文字列名) \t { \t \tのSystem.out.println( "あなたの名前は:" +名)。 \t} \t \tデフォルトのボイドディスプレイ(文字列firstNameの、文字列の姓) \t { \t \tのSystem.out.printlnは( "あなたのフルネームは:" + firstNameの+ "" +姓)。 \t} \t \t public void display(); \t } –
1
インタフェースと実装クラスの両方でオーバーロードされたデフォルトメソッドの定義を提供できます。以下のコードをご覧ください: -
public class DefaultMethodConflicts2 implements DefInter3,DefInter2 {
public static void main(String[] args) {
new DefaultMethodConflicts2().printme();
new DefaultMethodConflicts2().printmeNew();
new DefaultMethodConflicts2().printme("ashish");
}
/*
If we do not write below method than this step result in error :-
//public class DefaultMethodConflicts2 implements DefInter3,DefInter2 { // <-- error occur --> Duplicate default methods named printme with the parameters() and()
* are inherited from the types DefInter2 and DefInter3. To check this comment below method.
*/
public void printme() {
DefInter3.super.printme(); // <-- it require to compile the class
}
public void printmeNew() {
System.out.println(" From DefaultMethodConflicts2 :: printmeNew()"); // <-- compile successfully and execute -- line 19
// <---- overloading default method printmeNew() in implementing class as well.
}
}
interface DefInter3 {
default void printme() {System.out.println("from printme3()");}
default void printmeNew() {System.out.println("fFrom DefInter3:printmeNew()");} // <------ if DefaultMethodConflicts2::printmeNew() at line 19 is commented out
// then it will executes.
}
interface DefInter2 {
default void printme() {System.out.println("From DefInter2::()");}
default void printme(String name) {System.out.println("From DefInter2::printme2(String name) "+name);} // <--- Overloading printme() here in interface itself
}
関連する問題
- 1. インスタンス過負荷メッセージボックス
- 2. サーバーの過負荷:
- 3. MFC - メッセージボックス過負荷
- 4. C#の過負荷問題
- 5. サイレックス・過負荷クラスのユーザー
- 6. itextsharp PdfReader過負荷エラー
- 7. C++運転、過負荷、クラッシュ
- 8. のstd ::過負荷エラー
- 9. 過負荷参照変換
- 10. 曖昧過負荷C++ =
- 11. Kotlinで過負荷になる
- 12. Apacheエラーログ - サーバが過負荷ですか?
- 13. は、Javaでは、私は、フロートと過負荷と
- 14. 過負荷後置インクリメント演算子
- 15. 過負荷の問題=機能
- 16. 活字体過負荷矢印機能
- 17. MVCコントローラのアクションの過負荷
- 18. HazelcastのMapReduceのエグゼキュータの過負荷
- 19. C++演算子の過負荷チートシート
- 20. メソッドのパラメータおよび過負荷
- 21. 過負荷演算子の式のパフォーマンス?
- 22. 非友人シングルライン演算子+過負荷+ =
- 23. 過負荷演算子のエラー>>
- 24. C++/CLI演算子=過負荷参照
- 25. 「subbut_Click」マッチデリゲートのための過負荷「System.EventHandler」
- 26. は、私が過負荷を持つ2つの非常に類似した過負荷に
- 27. JavaからのCPU負荷
- 28. Javaクライアント/サーバアプリケーションの負荷テスト
- 29. JavaソケットリスナーCPU負荷100%
- 30. システム負荷とユーザー負荷
デフォルトのメソッドをオーバーロードできないと思うのはなぜですか? – Eran
オーバーロードまたはオーバーライドしますか? –