不是说抽象类不能被实例化吗?那这是怎么回事?

import java.util.Scanner;

public abstract class Test {
        int a;
        int b;
        char c;
        public abstract int maopao(int a);
        public abstract int maopao();
        public abstract int maopao(char c);

    public Test(int a, int b, char c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
}




public class Test_1 {
    public static void main(String[] args) {
        Test t= new Test(2, 4, 'A') {
            @Override
            public int maopao(int a) {
                return a;
            }

            @Override
            public int maopao() {
                return b;
            }

            @Override
            public int maopao(char c) {
                return c;
            }
        };
        System.out.println(t.maopao(t.a));
        System.out.println(t.maopao());
        System.out.println(t.maopao(t.c));

    }

}


运行结果:

img

那我这个算怎么回事?

@Override 你看这个注解,这个是当前重写父类的方法,你new Test后面大括号里面的代码就相当于写了一个类继承了Test 类,那三个@Override的方法是对应之类的方法。
说白了创建了一个内部匿名类然后实例化了,抽象类是不能实例化的。

你这也不属于实例化 只是以匿名内部类的形式继承了抽象类 重写了他的全部方法

你这个JDK是什么版本的?抽象类是不能实例化的。