急了急了
2017-10-31 12:22
采纳率: 40%
浏览 1.4k

关于Java抽象类实例化的问题

大家都知道抽象类不能被实例化
例如有个抽象类A
内有一个抽象方法public abstract void test();
A a = new A();是不行的

A a = new A(){
public void test(){ }
};
就ok 看起来就是调用构造函数的时候顺便重写了test()。。 还有这种操作吗。。这样写的原理是什么?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2017-11-01 00:34

    这样写相当于定义了一个派生的匿名类,这个类实现了test方法,它不是抽象的了,所以可以实例化。

    打赏 评论
  • 独家de记忆 2017-11-01 01:35

    1.你也知道抽象类不能被实例化;
    2.以下代码却可以:

     A a = new A(){
    public void test(){ }
    };
    

    抽象类不是不可以被实例化,而是需要先实现抽象类的抽象方法,然后才能实例化;

    比如:

    class B implements A{
        @Override
        public void test(){ }
        };
    }
    

    在这之后,就可以A a = new B();
    这是同一个道理。

    打赏 评论
  • penguinDada 2017-11-01 02:50

    A a = new A(){
    public void test(){ }
    };
    就是创建了匿名类,就相当于定一个类B extends A然后重写父类A的抽象方法,只不过这里是没有取名字

    打赏 评论

相关推荐 更多相似问题