实现代码重用的两个机制--接口和抽象类,这两个概念在初次接触的时候很容易分不清,现在我就把它们两放在一起对比一下。
接口
简单说就是用来与其它对象进行交互用的,即对象之间的交互是靠接口来实现的,不必关心具体的实现,实现改变也不会影响接口,也就是不影响使用接口的对象。面向对象的设计讲究的是尽可能的为用户提供最小的接口,我们都知道封装的概念,而接口就是封装实现的最重要的概念之一。最常说的一个例子就是插座,对电器来说提供一个标准的插空就可以,电器也不必关心,电的工作原理是什么,即便电的工作原理改变,只要插座不变,就不会对电器产生影响。
抽象类
“在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。”
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。而在C++中没有接口的概念,抽象类就提供了接口的功能。那为什么Java要提出接口的构造呢,因为C++中支持多重继承,而Java不支持,也许就是为了弥补这一点,才提出了接口的概念。
两者区别
接口与抽象类
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它
一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)
接口定义方法,不能实现,而抽象类可以实现部分方法。
JAVA类具有单继承,多实现的特点。每个类只能继承一个父类对象,但是可以实现多个父接口,顺序为:先继承,在实现。
那么接口的作用是什么呢?
1、Java单继承的原因所以需要曲线救国作为继承关系的一个补充。
2、把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。
3、定义接口有利于代码的规范。(接口分离原则)
抽象类的特点:
1.抽象类不能直接用new来实现
2.必须使用abstract修饰符去修饰
3.抽象类里可以有普通方法
4.抽象类里的抽象方法使用abstract修饰符去修饰,抽象方法没有方法体。(交给子类实现)
5.抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象
类也有构造器。
6.如果抽象类中具有抽象方法,子类必须实现抽象方法
******子类继承了抽象类,就必须重写抽象类中的所有方法
抽象类不能被直接创建对象实例,只能被子类继承。
接口与抽象类
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它
一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)
接口定义方法,不能实现,而抽象类可以实现部分方法。
JAVA类具有单继承,多实现的特点。每个类只能继承一个父类对象,但是可以实现多个父接口,顺序为:先继承,在实现。
那么接口的作用是什么呢?
1、Java单继承的原因所以需要曲线救国作为继承关系的一个补充。
2、把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。
3、定义接口有利于代码的规范。(接口分离原则)
抽象类的特点:
1.抽象类不能直接用new来实现
2.必须使用abstract修饰符去修饰
3.抽象类里可以有普通方法
4.抽象类里的抽象方法使用abstract修饰符去修饰,抽象方法没有方法体。(交给子类实现)
5.抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象
类也有构造器。
6.如果抽象类中具有抽象方法,子类必须实现抽象方法
******子类继承了抽象类,就必须重写抽象类中的所有方法
抽象类不能被直接创建对象实例,只能被子类继承。
接口与抽象类
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它
一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)
接口定义方法,不能实现,而抽象类可以实现部分方法。
JAVA类具有单继承,多实现的特点。每个类只能继承一个父类对象,但是可以实现多个父接口,顺序为:先继承,在实现。
那么接口的作用是什么呢?
1、Java单继承的原因所以需要曲线救国作为继承关系的一个补充。
2、把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。
3、定义接口有利于代码的规范。(接口分离原则)
抽象类的特点:
1.抽象类不能直接用new来实现
2.必须使用abstract修饰符去修饰
3.抽象类里可以有普通方法
4.抽象类里的抽象方法使用abstract修饰符去修饰,抽象方法没有方法体。(交给子类实现)
5.抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象
类也有构造器。
6.如果抽象类中具有抽象方法,子类必须实现抽象方法
******子类继承了抽象类,就必须重写抽象类中的所有方法
抽象类不能被直接创建对象实例,只能被子类继承。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。