abstract
abstract关键字,只能修饰类与方法。
抽象类
1、顾名思义,抽象的,没有具体的实例,无法实例化。
2、抽象类不能实例化也就意味着无法通过其对象调用其属性与方法,而必须通过其子类的对象进行调用。
3、抽象类中可以有普通方法和抽象方法,也可以没有,但通常有抽象方法的类才会用abstract修饰。
抽象方法
1、抽象方法没有方法体,相当于只给定了这个方法的格式规范,包括权限,返回值类型,方法名,形参列表等。
2、这也就意味着抽象方法无法直接调用,若一个抽象方法声明在一个非抽象类中,那么这个方法理应可以通过该类的的对象调用,但抽象方法又无法直接使用,所以,有抽象方法的类也必须声明为抽象类。
3、继承了抽象方法的子类对抽象方法进行重写后方可调用该方法。若子类未重写抽象方法,则子类也必须声明为抽象类。
许多不同的类包含有相同的属性与方法,而具体的实现又各不相同,就可以将这些共性提取出来抽象化。
接口
1.接口使用interface来定义
2.Java中,接口和类是并列的两个结构
3.如何定义接口:定义接口中的成员
JDK7及以前:只能定义全局常量和抽象方法
JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法。
4. 接口中不能定义构造器的!意味着接口不可以实例化
5. Java开发中,接口通过让类去实现(implements)的方式来使用。
如果实现类覆盖了接口中的所抽象方法,则此实现类就可以实例化。
如果实现类没覆盖接口中所的抽象方法,则此实现类仍为一个抽象类。
6. Java类可以实现多个接口 —>弥补了Java单继承性的局限性
格式:class AA extends BB implements CC,DD,EE
7. 接口与接口之间可以继承,而且可以多继承。
抽象类与接口的比较
感觉上,抽象类与接口都是对不同对象的共性的提取,不能实例化,都可以包含抽象方法。只是继承抽象类的要求更高,需要子类都具有抽象中所有的属性与方法等,而接口的实现只需实现类具有接口中定义的方法即可,接口可以被多实现,而抽象类只能单继承。
接口就像是为了更通用而降低了包含的内容的一致性要求,重新确定了格式要求的抽象类。。。