问题:Java抽象类和接口,基本类有什么区别?
抽象
概念:使用了关键字 abstract 声明的类叫做抽象类。如果一个类里包含了一个或多个抽象方法,类就必须指定(abstract)抽象。“抽象方法”属于一种不完整的方法,只含有一个声明,没有方法主体。
抽象类和具体类是相对的,并非是绝对的。抽象是一种概念性名词,具体是一种可见可触摸的现实对象。概念越小,则其抽象程度就越大,反之亦然。简单说,比如“人”比“男人”抽象一点,而“生物”又比人更抽象一点,“物质”又比“生物”更抽象。
抽象的概念是由具体概念依其“共性”而产生的,把具体概念的诸多个性排出,几钟描述其共性,就会产生一个抽象的概念。抽象思维,是人类思维达到高级阶段产生的一种能力,例如,当小孩子思维上不成熟时,它们只能掌握具体概念,它们学习代词“你、我、他”时往往遇到困难,因此代词具有较高的抽象性。
总之,抽象概念的外延大,内涵小,具体概念的外延小,内涵大。
由于从某种角度讲,接口是一种特殊的抽象类,它们之间渊源颇深,有很大的相似之处。所以总的说,类是对象的模板,抽象类和接口是具体类的模板。
(1)抽象类和普通类
a).普通类可以实例化调用;抽象类不能被实例化,因为它是存在于一种概念而不是具体。
b).普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非自己本身也是抽象类。
(2)抽象类和接口
接口是动作的抽象,抽象类是对本质的抽象
a).抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……)它们抽象的是人。说明,它们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。所以,在高级语言上,一个类只能继承一个类(抽象类),但是可以实现多个接口。(吃饭接口、走路接口)。
b).使用
①.抽象类 和接口都是用来抽象具体对象的,但是接口的抽象级别最高
②抽象类可以由具体的方法,变量,接口没有具体的方法,可以由变量(变量默认是 public static final)
③.抽象类主要用来抽象类别,接口主要用来抽象功能
④.抽象类中,且不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的。
⑤.接口是设计的结果,抽象类是重构的结果。
c).使用方向:当你关注一个事物本质的时候,用抽象类;当你关注一个操作的时候,用接口
(参考博客http://blog.csdn.net/csdn_aiyang/article/details/71171886)