注目記事

【Javaコード入門】継承、インターフェイス_④無名クラスを定義する

無名クラスを定義する

new clazz() { definition }
new interfaze() { definition }
 clazz:スーパークラスの名前
 interfaze:インターフェイスの名前
 definition:無名クラスの定義

無名クラス(匿名クラス)を利用することで、クラスやインターフェイスの継承/実装からインスタンス化までをまとめて1文で表現できます。使い捨てのクラスを用意する際などによく利用されます(イベントリスナーの定義などでよく見かけるかもしれません)。
たとえば以下はPrintableインターフェイスの実装クラスを無名クラスで表したものです。

Printable.java

  1. package com.example.mynavi.object;
  2.  
  3. public interface Printable {
  4.   void print();
  5. }

AnonymousSample.java

  1. package com.example.mynavi.object;
  2.  
  3. public class AnonymousSample {
  4.  
  5.   public static void main(String[] args) {
  6.     var p = new Printable() {
  7.       @Override
  8.       public void print() {
  9.         System.out.println("TEST");
  10.       }
  11.     };
  12.     p.print();  // 結果:TEST
  13.   }
  14. }

関連ページ

継承、インターフェイス_目次
extendsキーワード
interface命令
implementsキーワード
無名クラスを定義する
ラムダ式を利用する

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。