私はJavaプログラミングを開始しています。抽象クラスを知りました。私はあなたがサブクラスになるようにそれらを拡張する具体的なクラスを作成せずにインスタンス化できないことを知っています。しかし、私はこのコードを試してみると、本当に混乱してしまいました。抽象クラス 'メソッドの本体を持つインスタンス'
abstract class Communication{
public void FirstMethod()
{
System.out.println("I am first method()\n");
}
}
public class Main{
public static void main(String[] args){
Communication communication = new Communication() {
@Override
public void FirstMethod(){
super.FirstMethod();
}
};
communication.FisrtMethod();
}
}
出力は次のようになります。私は、最初の方法()しています。 私はそれを変更する場合:
Communication communication = new Communication() {
@Override
public void FirstMethod(){
System.out.println("I've been called from Main");
}
};
出力は次のようになります。私は、メインから呼ばれてきました。 これはインスタンス化の一種なのか、それとも何のコンセプトなのか、誰か説明してもらえますか?
これは、いわゆる匿名の内部クラスです。 – ntalbs
ntalbsが言ったように、これは '匿名の内部クラス 'です。クラスのインスタンスを作成し、最初のインスタンスを拡張する新しいサブクラスを実際に作成することなく、そのメソッドの一部をオーバーライドする場合に使用できます。主にリスナーで使用されています... – Yazan
サイドノートとして、[機能インタフェース](https://docs.oracle.com/javase/8/docs/api/java/util)が使用されるようになりました。 /function/package-summary.html) – Aaron