抽象是面向对象中的重要概念,从逻辑上来说,抽象的定义来源于对于很多东西,它们并不能代表具体的事物,这类东西只是一个概念。没有一个具体的实体与之相应。所以我们只能将其定义为抽象的。
在java中,抽象类用来定义那些无法具体实现的东西,比如说动物和植物,它们是一个概念,是一种代表,却没有具体的属性和方法。所以我们就用abstract来修饰它们,他们是虚拟的,但是又是不可缺少的。它们是所有动物和植物的模板。
抽象类中有很多注意事项,但其实它们都是因为抽象类的特性而存在。抽象类是java中一种悲催的类,它的存在,就是为了让别的类继承它。要是我的一切都只是为了让别人去继承,那我不如死了算了,其他类都有对象,就抽象类没有,我们找不到对象还可以自我安慰,劳资可以new 一个 想怎么new 就怎么new。可是人家抽象类不能啊。别问为什么不能?讲出来都难受,因为抽象类之中,总有一些方法是抽象的,没有方法体,这代表抽象类的某些功能是完全没有的。它是一个残缺的类,所以没有对象,也不能new对象,毕竟没有对象愿意当一个残缺类的对象。
抽象类的很多特性都是因为它是一个为了被继承而产生的类。
首先,它抽象类中一定要有抽象方法。为什么呢?因为不能让它有对象啊!真是悲惨。
抽象类是不能被实例化的类,所以它必须有抽象方法。它允许有被实现的方法,但是必须要是抽象的。
然后抽象类天生被继承的特性导致了一下特性。
它的属性修饰符必须是public 或者是 protected或者是default的,保证无论在哪儿都能被继承。惨啊。不写修饰符的情况下默认它是public
抽象类可以有main方法
它是有构造的类,毕竟继承以后子类要调用它的构造。
抽象类可以继承一个类,可以继承多个接口
在添加新方法时,你可以直接在抽象类中实现一个方法,其子类可以继承,不用修改。
抽象类中没有静态方法,因为静态不能被重写,更别说final了,抽象类是绝对不允许用final修饰的。
下面我们来看看java中的接口,如果说抽象类的抽象还有挽回余地,那么接口简直是抽象得无可救药。
一般我们会说接口是一个绝对抽象的抽象类,其实它和抽象类是两种东西。
接口有中是不允许出现成员的东西的,无论属性和方法。
抽象类中可以有成员属性,接口中的属性必须是静态的终态的。也就是说,接口中的属性也就拿来看看而已——塑料苹果。
接口中你不用在每个方法前面声明abstract,因为它们默认就是抽象的。
还有一点,抽象类的子类继承抽象类,可tm接口是没有子类的,连被类继承的资格都木有,只能被实现。但是还好接口可以继承接口,还可以多继承,,,,,不过继承的也就是其他接口的抽象方法,大家都抽象,继承不继承也就这样呗。不过类只有一个爹,没节操的接口就是三姓家奴。
接口和抽象类的区别,抽象类是模板是标准,你继承了我你就得当我儿子。接口呢,接口就是我东西就在这里摆着,谁要用都来带走(反正那些方法都是抽象得,拿去还是得自己实现)。
用一个好听的成语来形容接口的话,大概是人尽可夫吧。接口更像是制定的一种标准。