首先,在涉及接口和抽象类的区别时,先来介绍一下接口是什么?,抽象类是什么?
接口:(interface)
含义: 用interface修饰的类,里面的方法都是抽象方法
1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,
接口本身也可以继承多个接口。
2 接口里面的成员变量默认都是public static final类型的。必须被显示的初始化。
3 接口里面的方法默认都是public abstract类型的。隐式声明。
4 接口没有构造方法,不能被实例化。
5 接口不能实现另一个接口,但可以继承多个接口。
6 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象
类。
**抽象类 :**
含义:含有抽象方法的类称为抽象类
作用:抽象类主要用来进行类型隐藏和充当全局变量的角色。
1 如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。
2 抽象方法必须存在于抽象类中。
3 抽象类中可以有一般的变量和一般的方法。
4 子类继承抽象类必须实现其中抽象方法,除非子类为抽象类。
private void print(){};此语句表示方法的空实现。
abstract void print(); 此语句表示方法的抽象,无实现。
接口和抽象类的区别 :
1 接口只能包含抽象方法,抽象类可以包含普通方法。
2 接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。
3 接口不包含构造方法,抽象类里可以包含构造方法。
抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充
1 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。
2 如果许多类实现了某个接口,那么每个都要用代码实现那些方法
3 如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代
码,而那些个性化的方法则由各个子类去实现。
所以,抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会出现紧耦合的问题。
应用场合很简单了
1 优先定义接口
2 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。
【拓展】
1.面向接口编程和面向对象编程是什么关系
首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。
**2.接口的本质**
接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子:
interface InterfaceName
{
void Method1();
void Method2(int para1);
void Method3(string para2,string para3);
}
1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。(体现了自然界“如果你是……则必须能……”的理念。)
2)接口是在一定粒度视图上同类事物的抽象表示。注意这里我强调了在一定粒度视图上,因为“同类事物”这个概念是相对的,它因为粒度视图不同而不同。
3.面向接口编程综述
那么什么是面向接口编程呢?我个人的定义是:在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。
这样做的好处是显而易见的,首先对系统灵活性大有好处。1.当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉。
比如:
我们将一个WD的60G硬盘换成一个希捷的160G的硬盘,计算机其他地方不用做任何改动,而是把原硬盘拔下来、新硬盘插上就行了,因为计算机其他部分不依赖具体硬盘,而只依赖一个IDE接口,只要硬盘实现了这个接口,就可以替换上去。从这里看,程序中的接口和现实中的接口极为相似,
2.不同部件或层次的开发人员可以并行开工,
比如:
就像造硬盘的不用等造CPU的,也不用等造显示器的,只要接口一致,设计合理,完全可以并行进行开发,从而提高效率。
1.关于“面向接口编程”中的“接口”与具体面向对象语言中“接口”两个词
“面向接口编程”中的接口是一种思想层面的用于实现多态性、提高软件灵活性和可维护性的架构部件,而具体语言中的“接口”是将这种思想中的部件具体实施到代码里的手段。
**2.关于抽象类与接口**
抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。
抽象类和它的子类之间应该是一般和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。
1.抽象类可以用的关键字是继承extends,接口是实现implements.
2.接口可以实现多个,抽象类只能继承一个.
3.抽象类中可以存在非抽象方法,接口中的方法都是抽象的.
4.抽象类中可以有成员变量,而接口中不能有成员变量.
5.抽象类中可以有构造方法但是不能被实例化.
6.抽象类里可以没有抽象方法.
7.抽象方法要被实现,所以不能是静态的,也不能是私有的.
8.接口中的抽象方法默认且必须都是public的,而抽象类中的抽象方法可以是public、protect或默认.
9.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的属性可以是任意的,而接口中的静态成员变量默认且必须是public static final。
10.如果一个类里有抽象方法,那么这个类只能是抽象类.
11.抽象类中的抽象方法不能有方法体,其他方法可以.