关于java抽象类能不能实例化的讨论

最近参与某公司的面试(java方向),一面和二面都不约而同提出了java抽象类(接口)能不能被实例化这个问题。
答案显然是不能,但是在实际编程中类似new ActionListener(){ public void actionPerformed(ActionEvent e) { } }这样直接new一个抽象类对象的用法很常见啊。当然可能有人说这是匿名类,匿名继承抽象类了。可是我还是不明白面试官问这个问题的真实目的是什么?我回答的是在编程中是可以实例化的,只要实现未实现的方法就行了。结果被面试官小鄙视了一下。。我这样想有错吗?这个问题的意义在哪?是要考我什么?new和实例化的区别?。。。
阅读 13.7k
5 个回答

我觉得这是表达能力问题,你前半部分写的不是挺好的么

抽象类或接口不能直接实例化,但实际使用中可以通过匿名类机制来方便地就地实现接口并创建实例

然后你说的是

编程中是可以实例化的,只要实现未实现的方法就行

你觉得你这样说对方能知道你理解了这件事情么?既然猜到了考点就绕着考点组织答案啊

不过我不搞java,不清楚里面还有没有其他考点哈

目的就是考你基本概念
如果不用匿名类,写一个新子类a实现虚类,然后new a(),这算不算实例化虚类呢?

匿名类并不是你原来说的抽象类。
毕竟已经继承了。

楼主想太多了吧,直接回答“java抽象类(接口)不能被实例化”就好了, 匿名类已经是子类了, 楼主虽然对这个了解的很到位,但是给面试官的回复没有表现出来

新手上路,请多包涵

我的理解是:抽象类或接口不是不能实例化,而是不能直接实例化,即不能自己实例化,需要借助其子类/实现类间接实例化。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏