開発: Java 8 インターフェースに関するメモ

以下の注記は、Java 8 のインターフェースにおけるキーワードdefaultおよびの使用について説明します。static

コードの例 1。あいまいなフィールドやメソッドがあっても、それ自体は問題にはなりませんが、あいまいな方法でそのようなフィールドやメソッドを参照すると、コンパイル時エラーが発生します。

したがって、 : を呼び出すことはできません。System.out.println(VALUE);あいまいになるからです (VALUE 定義が 2 つあります)。ただし、次の行は有効です。

C tc = new C();
System.out.println(( ( I1) tc).VALUE);

I1 tc = new C();
System.out.println(tc.VALUE);

コードの例 2。defaultキーワード。

getId()Interface1 のデフォルト メソッドであることに注意してください。

インターフェイス Interface2 は getId メソッドを抽象として再宣言するため、D クラスはこのメソッドの実装を提供するか、抽象としてマークする必要があります。この場合、クラスを抽象化しても、次のステートメントがあるため役に立ちません。Interface1 acct = new D(); クラス D を抽象化すると、次のコンパイラ エラーが発生しますCannot instantiate the type D。

クラス D が Interface2 ではなく Interface1 を実装している場合は、デフォルト メソッド getId の実装を提供する必要はありません。この機能は、追加のメソッドを使用してインターフェイスを拡張するのに役立ちます。必要なのは、defaultInterface1 で使用されているのと同じ方法でキーワードを使用してインターフェイスにデフォルト実装を提供することだけです。

コードの例 3。Java では、複数のクラスを拡張することはできません。これは、コンパイラがどのスーパークラスのメソッドを使用するかを決定できない「ダイヤモンド問題」が発生するためです。デフォルト メソッドを使用すると、インターフェイスでもダイヤモンド問題が発生します。

上記のクラス D は、Interface1 と Interface2 を実装しています。コンパイラは、どの getId メソッドを選択するかを決定できません。インターフェースの共通のデフォルト メソッドの実装を提供することが必須になっています。したがって、クラスが上記の両方のインターフェースを実装している場合は、getId()メソッドの実装を提供する必要があります。そうしないと、コンパイラはコンパイル時エラーをスローします。

Java 8 インターフェースのデフォルト メソッドに関する重要なポイント:

  • Java インターフェースのデフォルト メソッドは、実装クラスを壊す心配をせずにインターフェースを拡張するのに役立ちます。
  • Java インターフェースのデフォルト メソッドは、インターフェースと抽象クラス間の違いを埋める橋渡しをします。
  • Java 8 インターフェースのデフォルト メソッドは、ユーティリティ クラスを回避するのに役立ちます。たとえば、すべての Collections クラス メソッドをインターフェース自体で提供できます。
  • Java インターフェイスのデフォルト メソッドは、基本実装クラスを削除するのに役立ちます。デフォルトの実装を提供でき、実装クラスはどれをオーバーライドするかを選択できます。
  • インターフェースにデフォルト メソッドを導入する主な理由の 1 つは、Java 8 の Collections API を拡張してラムダ式をサポートすることです。

getOtherId()クラス E は単純なクラス メソッドであり、インターフェース メソッドをオーバーライドしていないことに注意してください。

アプリケーションを実行すると、次の出力が得られます。

Object 1
E: get Id
E: get Other Id
Object 2
E: get Id
Calling the static method in Interf1
Interface 1: get Other Id

Java 8 インターフェースの静的メソッドに関する重要なポイント:

  • Java インターフェースの静的メソッドはインターフェースの一部であるため、実装クラス オブジェクトには使用できません。
  • Java インターフェイスの静的メソッドは、null チェック、コレクションのソートなどのユーティリティ メソッドを提供するのに適しています。
  • Java インターフェイスの静的メソッドは、実装クラスによるオーバーライドを許可しないことでセキュリティの提供に役立ちます。
  • Java インターフェースの静的メソッドを使用すると、コレクションなどのユーティリティ クラスを削除し、そのすべての静的メソッドを対応するインターフェースに移動できます。これにより、簡単に見つけて使用できるようになります。

詳細については、 Oracleの公式ドキュメントをご覧ください。

提案された投稿

ドメイン名に関する情報の検索

Brian P. Hogan 著『Small, Sharp Software Tools』からの抜粋

ドメイン名に関する情報の検索

facebook.com にリクエストを送信すると、コンピュータはドメイン名を検索してそのドメイン名を IP アドレスに変換し、コンピュータが接続できるようにします。

Spring Boot での Apache Kafka の構成と使用

スプリングブーツを履いたカフカ

Spring Boot での Apache Kafka の構成と使用

はじめに Apache Kafka は、大規模で高スループット、フォールトトレラントなリアルタイム データ ストリーミングを処理するオープンソースの分散ストリーミング プラットフォームです。このシステムは、プロデューサーがトピックにメッセージをパブリッシュし、コンシューマーがそれらのトピックをサブスクライブしてメッセージを消費するパブリッシュ/サブスクライブ モデルに基づいています。

関連記事

ネットワークテレビツイッター

ネットワークテレビツイッター

古いものは再び新しくなり、以前はキラキラ輝いていたものがくすんで見えます。私は、JNCO ジーンズが 1990 年代後半の他のファッションとともにダウンタウンのクールな子供たちの間で復活したことについて話しているのではありません。

その脅威アーカイブ: Vol 7 ブラックバスタ

その脅威アーカイブ: Vol 7 ブラックバスタ

今日の相互接続された世界では、サイバー攻撃の脅威がかつてないほど蔓延しています。サイバー犯罪者や国家主体は常に脆弱性を悪用して貴重なデータを盗もうとしており、あらゆる規模の組織に重大なリスクをもたらしています。

脅威ハンティングのための OSINT の収集

脅威ハンティングのための OSINT の収集

サイバー愛好家の皆さん、こんにちは!OSINT for Threat Hunting シリーズへようこそ。最初の記事では、OSINT の概要と脅威ハンティングにおけるその重要性について説明しました。

電話番号だけで誰でも追跡 | OSINT調査

電話番号だけで誰でも追跡 | OSINT調査

あなたは、OSINT 調査員、CTF プレーヤー、または単にスパム電話を受けている人である可能性があります。広告で見た番号を確認しようとしている人。