抽象类:在面向对象领域,抽象类主要用来进行类型隐藏
特点:
1、一个具体类继承抽象类,必须实现抽象类中所有抽象方法
2、抽象方法没有方法体,而应在它们的子类中实现所有的抽象方法,可以为空方法体
3、abstract 关键字只能用于普通方法,不能用于 static 方法或者构造方法中
4、在抽象类中必须包含至少一个抽象方法,并且所有抽象方法不能有具体的实现
接口:约定和规范
特点;
1、实现接口,要实现所有方法,可以是空实现
3、是方法、属性、事件和索引符的组合而已。接口不能被实例化,接口没有构造方法,没有字段。
4、Java 接口的方法只能是抽象的和公开的,Java 接口不能有构造方法,Java 接口可以有 public、Static 和 final 属性。
5、具有 public 访问控制符的接口,允许任何类使用;没有指定 public 的接口,其访问将局限于所属的包。
6、方法的声明不需要其他修饰符,在接口中声明的方法,将隐式地声明为公有的(public)和抽象的(abstract)。
7、在 Java 接口中声明的变量其实都是常量,接口中的变量声明,将隐式地声明为 public、static 和 final,即常量,所以接口中定义的变量必须初始化。
8、接口没有构造方法,不能被实例化。
9、如果接口本身被定义为 public,则所有的方法和常量都是 public 型的。
Java接口和抽象类的区别
从前面对面向对象的设计原则的讲解,读者可以了解到,其实所有的设计原则和设计模式都离不开抽象,因为只有抽象才能实现上述设计原则和设计模式。
在 Java 中,针对抽象有两种实现方式:一种是接口,一种是抽象类。很多读者对这两种实现方式比较困惑,到底是使用接口,还是使用抽象类呢?对于它们的选择甚至反映出对问题领域本质的理解,对设计意图的理解是否正确、合理?
设计思想区别
从前面抽象类的具体实现类的实现方式可以看出,其实在 Java 中,抽象类和具体实现类之间是一种继承关系,也就是说如果釆用抽象类的方式,则父类和子类在概念上应该是相同的。接口却不一样,如果采用接口的方式,则父类和子类在概念上不要求相同。接口只是抽取相互之间没有关系的类的共同特征,而不用关注类之间的关系,它可以使没有层次关系的类具有相同的行为。因此,可以这样说:抽象类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象,而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象。
从上面的分析可以看出,对于接口和抽象类的选择,反映出设计人员看待问题的不同角度,即抽象类用于一组相关的事物,表示的是“isa”的关系,而接口用于一组不相关的事物,表示的是“like a”的关系。