Java 匿名クラス
Javaでは、クラスの中に別のクラスを含めることができ、クラス名を一切指定せずに直接インスタンス化できます。
主に、必要なときにオブジェクトを作成して特定のタスクを実行するために使用され、コードをより簡潔にできます。
匿名クラスは名前を持つことができないクラスであり、参照することができず、作成時にのみnewステートメントで宣言できます。
匿名クラスの構文形式:
class outerClass {
// 定义一个匿名类
object1 = new Type(parameterList) {
// 匿名类代码
};
}
上記のコードは匿名クラスのオブジェクト object1 を作成します。匿名クラスは式形式で定義されるため、末尾はセミコロンで;終了します。
匿名クラスは通常、親クラスを継承するか、インターフェースを実装します。

匿名クラスは親クラスを継承する
以下の例では、Polygon クラスを作成します。このクラスには display() メソッドが1つだけあります。AnonymousDemo クラスは Polygon クラスを継承し、Polygon クラスの display() メソッドをオーバーライドします:
例
class Polygon {
public void display() {
System.out.println("Polygon クラスの内部");
}
}
class AnonymousDemo {
public void createClass() {
// 作成された匿名クラスは Polygon クラスを継承します
Polygon p1 = new Polygon() {
public void display() {
System.out.println("匿名クラスの内部。");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
public void display() {
System.out.println("Polygon クラスの内部");
}
}
class AnonymousDemo {
public void createClass() {
// 作成された匿名クラスは Polygon クラスを継承します
Polygon p1 = new Polygon() {
public void display() {
System.out.println("匿名クラスの内部。");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
上記のコードを実行すると、匿名クラスのオブジェクト p1 が作成され、そのオブジェクトは匿名クラスの display() メソッドを呼び出し、出力結果は次のようになります:
匿名クラス内部で。
匿名クラスはインターフェースを実装する
以下の例で作成された匿名クラスは Polygon インターフェースを実装しています:
例
interface Polygon {
public void display();
}
class AnonymousDemo {
public void createClass() {
// 匿名クラスがインターフェースを実装します
Polygon p1 = new Polygon() {
public void display() {
System.out.println("匿名クラスの内部。");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
public void display();
}
class AnonymousDemo {
public void createClass() {
// 匿名クラスがインターフェースを実装します
Polygon p1 = new Polygon() {
public void display() {
System.out.println("匿名クラスの内部。");
}
};
p1.display();
}
}
class Main {
public static void main(String[] args) {
AnonymousDemo an = new AnonymousDemo();
an.createClass();
}
}
出力結果は次のようになります:
匿名クラス内部で。その他の拡張