1.抽象类定义:抽象类是从多个具体类中抽象出来的父类,具有更高层次的抽象,抽象类提现的是一种模板模式的设计,从而避免了子类设计的随意性。 抽象类在使用的时候是将主要功能封装起来,在主要部件上的增添(比如电脑的更新换代上)通过抽象类来实现,而接口则偏向于对附加功能的增删管理上。
经常有人会问,为什么要那么复杂的去定义一个抽象类又去定义一个接口呢?将这些功能集中起来写在一个类里边多方便,有好理解。这种想法在解决小问题的时候显得得心应手,又好理解,又好写。
但是我们在解决复杂问题的时候采用这种方法就会暴露出很多的弊端:
我们在解决一个复杂问题的时候就需要先将他简单的分类,然后针对分类在进行细化,先考虑问题的解决顺序什么的,最后对问题的每个模块都有了掌握之后,我们再对其进行过程的编写。这样我们在面对一个复杂的问题时就会显得得心应手,而那种写在一起的方法则不能将问题考虑周全,即使勉强考虑周全了,估计代码也就没几个人能看懂了,使用起来也显得很烦琐,找不到个头绪。
2.抽象类定义方法:
public abstract class A
{
public abstract double getparm();
}
3.抽象类的规则:
1)不能将属性字段定义成抽象的,且abstract和final与static不能放在一起定义。
2)抽象类永远不能创建实例。
3)抽象类中可以包含属性、方法(普通和抽象)、构造器、初始化块、内部类和枚举类,但其中的构造器不能用于创建实例,主要用于被其子类调用。
4)若子类并未完全实现父类包含的抽象方法,那么该子类也要定义成抽象类。
4.接口:
接口是从多个相似类中抽象出来的规范,体现的是规范和实现分类的设计哲学。相当于一种特殊的“抽象类”。只能在接口中定义方法,而其中的方法只能在继承的子类中实现。比如主机板上的PCI插槽,只要一块显卡遵守PCI接口规范,就可以插入PCI插槽内,不需关心显卡的内部是如何实现。
接口可以用于声明引用类型变量,但不能用于创建实例。当使用接口声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象。
5.接口的方法和属性:
在接口中可定义常量,系统会自动为这些属性添加static和final两个修饰符,即public static final。说明该属性是与接口相关的。
系统会自动为接口中定义的方法添加abstract修饰符,且不能使用static修饰符。
6.定义继承类和接口的方式
public classA extends B implements C,D{}
继承接口使用implements
7.区别:
1)接口作为系统与外界交互的窗口,体现的是一种规范,接口规定了实现者必须向外提供哪些服务。接口不应经常改变。
2)抽象类作为系统中多个子类的共同父类,体现的是一种模板式设计,可以被当成系统实现过程中的中间产品,这些中间产品已经实现了部分功能(已经实现的普通方法),但还需进一步完善。
3)接口中不能包含已经提供实现的方法,而抽象类中可以。
4)接口中不能定义静态方法,抽象类可以。
5)接口中只能定义静态常量属性,抽象类可以定义普通属性。
6)接口不包含构造器和初始化块。
8.接口的使用
接口类似于实现多态的功能,定义形参时,可以使用接口类型的引用变量,具体功能是由传递过来的实现该接口的实现类决定的。