您的位置:首页 > 编程语言 > Java开发

从对子类影响角度分析抽象类和接口的区别

2015-09-29 15:37 344 查看
在java中,无论是写代码、面试、交流,均不可或缺的提到一个问题,抽象类和接口的区别

网上可谓众说纷纭,再次不在多说,想知道的请找度娘。

我今天想分享的是在对“子类”/“实现者”的影响角度来分析二者的区别:

抽象类

首先, 我们来从抽象类 的三个字进行分析:

抽象类的主体是 ,只不过这个类 是抽象的

那么,他就具有了应该具备类的全部功能,但他是抽象的,那么他必然可以有一般类不具有的东西——抽象方法

至于抽象类和类的差别,不是此文章的重点,再次不在细说。

抽象天生就是用来继承(extends)的,他决定子类/派生类是什么的问题。

如:

/**
*
* 鸟的父类
* 假设鸟只会飞和吃
*
* <br>==========================
* <br> 开发:myhc2014@163.com
* <br> 创建时间:2015年10月16日下午6:45:07
* <br>==========================
*/
public abstract class Brid {

/**
* 飞,子类将要复写该方法,实现自己的飞行方式
*/
public abstract void fly();

/**
* 吃
*/
public void eat() {

}
}

/**
*
* 百灵鸟
*
* <br>==========================
* <br> 开发:myhc2014@163.com
* <br> 创建时间:2015年10月16日下午6:44:40
* <br>==========================
*/
public class Lark extends Brid {

@Override
public void fly() {
// 实现百灵鸟到底是怎么飞的
}

}


我们可以很明确的说,百灵鸟是鸟

接口

我们来看看,接口是什么?

有人说,接口是对抽象类的抽象,把抽象类中所有类的东西,都抽出去了,剩下的部分就是接口。

我不反对,这的确是一个接口抽象的过程。

但接口能用来干什么呢?

在实际开发中,接口往往用于定义协议或者定义功能

接口是类的一个附加功能,如果一个类实现了某个接口,说明该类具备某种能力;

而并不能说,xx类对象,是某接口的子类(这样说主要是区别于抽象类)。

引用上面的百灵鸟例子。

大家都知道,百灵鸟区别于其他鸟的最大特点应该是唱歌了吧,

我们定义一个唱歌者接口

/**
*
* 唱歌者
*
* <br>==========================
* <br> 公司:奇虎360
* <br> 创建时间:2015年10月16日下午6:37:35
* <br>==========================
*/
public interface IMusicer {

/**
* 唱歌
*/
void sing();
}


由于百灵鸟会唱歌,百灵鸟的类就可以进化一下:

/**
*
* 百灵鸟
*
* <br>==========================
* <br> 公司:奇虎360
* <br> 开发:chenbaolong@360.cn
* <br> 创建时间:2015年10月16日下午6:43:38
* <br>==========================
*/
public class Lark extends Brid implements IMusicer {

@Override
public void sing() {
// 百灵鸟唱歌

}

@Override
public void fly() {
// 实现百灵鸟到底是怎么飞的

}

}


通过上面的代码实例,

通常情况下,我们会说,看到了一个会唱歌的百灵鸟,却不会说一个会飞的歌手

当然,如果商场有活动,需要一个歌手唱支歌,把一个百灵鸟放上去,也是可以的,因为

他具备歌手的唱歌能力。

总结

通过上面的介绍,不知道您是否知道了抽象类和接口,在对子类影响中的地位。

通过对抽象了和接口的理解,能加深对设计模式的理解,也能对事务的抽象能力。

千言万语汇成一句话:

抽象类的子类一定是抽象类所抽象的对象接口的实现类一定具备接口所定义的功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息