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



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

面试 java

Carol 10 years ago

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

莉贝尔.奈吉雅 answered 10 years ago

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

红豆黑米粥 answered 10 years ago

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

bt中的蝌蚪 answered 10 years ago

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

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

然后你说的是

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

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

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

满地找膀胱 answered 10 years ago

Your Answer