[Java] Anonymous class
25950 ワード
Anonymous class
Anonymous class(匿名クラス)は、その名の通り名前のないLocal内部クラスです.
名前がないため、コンストラクション関数として作成するのではなく、クラスを定義しながらインスタンスを作成します.
Java例1
ソースコード
public class Person {
private String name;
public Person(String name) {
this.name = name.;
}
public MyReadable createInstance(int age) {
MyReadable person = new MyReadable() {
@Override
public voidi readInfo() {
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
System.out.println();
}
};
retrun person;
}
}
interface MyReadable {
public abstract void readInfo();
}
🤔 上記のLocal inner classのPerson例との違いは何ですか?Local inner classは、
PersonWithAge
というクラスを指定して生成します.ただし、Anonymous inner classはその名の通り
익명
内部クラスであるため、個別に指定されたクラスは存在しない.MainではAnonymous Inner Classもそのまま使えます.
public class Main {
public static void main(String[] args) {
System.out.println("Anonymous Inner Class (익명 내부 클래스)\n");
Person p = new Person("홍길동");
MyReadable r = person.craeteInstance(30);
r.readInfo();
System.out.println();
// Anonymous 01
MyReadable r2 = new MyReadable() {
int age = 10;
@Override
public void readInfo() {
System.out.println("age = " + age);
System.our.println();
}
};
r2.readInfo();
// Anonymous 02
new MyReadable() {
int age = 20;
@Override
public void readInfo() {
System.,out.println("age = " + age);
System.our.println();
}
}.readInfo();
}
}
実行結果
Java例2
ソースコード
public class Main {
public static void(String[] args) {
System.out.println("Anonymous Inner Class\n");
// Anonymous 01
System.out.println(new MyAbstract() {
int c = 3;
@Override
int sum(int a) {
return a + b + n + c;
}
}.sum(10));
System.out.println();
// Anonymous 02
System.out.println(new MyClass() {
int d = 40;
@Override
int sum(int c) {
return a + b + c + d;
};
}.sum(30));
}
}
abstract class MyAbstract {
int a = 1;
int b = 2;
abstract int sum(int a);
}
class MyClass {
int a = 10;
int b = 20;
int sum(int c) {
return a + b + c;
}
}
System.out.println()メソッド内に匿名の内部クラスを作成し、実行して出力します.例1では、
인터페이스 (Myreadable)
を使用して匿名の内部クラスを作成した.例2は、
추상 클래스 (MyAbstract)
および일반 클래스 (MyClass)
を使用して匿名の内部クラスを作成できることを示している.実行結果
Java例3
クラスを継承して実装する方法と、匿名クラスを使用する方法を見てみましょう.
ソースコード
public class Main {
public static void main(String[] args) {
System.out.println("익명 내부 클래스 활용\n");
System.out.println("1. 상속 받아서 구현하는 방법");
Calculable c1 = new MyMath();
double result = c1.operate(1.0, 2.0);
System.out.println("result = " + result);
System.our.println();
System.out.println("2. 익명 클래스 사용");
Calculable c2 = new Calculable() {
@Override
public double operate(double x, double y) {
return x * y;
}
};
System.out.println("result = " + c2.operate(3.0, 4.0));
System.out.println("result = " + new Calculable() {
@Override
public double operate(double x, double y) {
return Math.pow(x, y);
}
}.operate(5.0, 2.0));
}
}
inferface Calculable {
public abstract double operate(double x, double y);
}
class MyMath implements Calculable {
@Override
public double operate(double x, double y) {
return x + y;
}
}
実行結果
Reference
この問題について([Java] Anonymous class), 我々は、より多くの情報をここで見つけました https://velog.io/@mimah/Java-Anonymous-classテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol