在软件业,抽象能力的重要性怎么说都不为过。程序员经常需要面对、处理异常复杂的业务和逻辑,如果不具备强大的抽象能力,无法把具体变成概念,进而驾驭概念进行思考,就很难降低问题的复杂度。
我们经常说,万事万物皆对象。在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
终于说到主题了,抽象类可不可以实例化呢?答案肯定是不可以。
比较正式的解释是:这是由语言的设计决定的,就是纯粹为了继承而存在的。
有人认为是抽象类里有未实现的抽象方法,实例化时不能正常分配内存,而且调用这个方法也会报异常。
学过汇编的可能知道,程序都有一个代码段,在内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,java不允许抽象类直接实例化。
其实抽不抽象是设计时就已经考虑好的问题,因为在设计时,考虑到某些类所具备的信息不足以实例化一个对象,才设计成抽象的。