java中接口和抽象类的区别
接口和抽象类的简要对比:
对比点 | 接口 | 抽象类 |
---|---|---|
本质 | 对行为的抽象 | 对事物整体的抽象 |
内部成员 | 只能包含抽象方法和静态变量 | 可以有抽象方法,变量以及实现的方法 |
描述关系 | like -a | is-a |
实现抽象方法的关键字 | implement | extends |
是否支持夺继承 | 是 | 否 |
继承后的描述 | 我有。。行为 | 我是。。。。 |
example:
以网上流行的door和alarm为例:
首先分析功能:
door具有开门和关门的功能,还有宽和高等属性,所以我们可以对门进行抽象,这里是对事物的抽象,所以使用抽象类:
abstract class Door{
int height;
int width;
void close();
void open();
}
现在我需要一个门,怎么办呢?很简单,继承Door即可,实现如下:
class MDoor extends Door{
height = 15;
width = 5;
@Override
void close()
{}
@Override
void open()
{}
}
现在你也需要一个门,并且你的门需要有报警功能,分析一下:首先你要的是门,所以要实现Door,同事你需要报警功能,这可怎么办,在Door里边增加一个alarm()功能?我当然不干,我不要报警功能,他打扰我休息,怎么办呢?哦,刚才说的接口是对行为的抽象,那我直接把报警功能抽象成接口就可以了,实现如下:
interface Alarm{
void alarm();
}
然后就可以生产你的门了:
class YourDoor extends Door Implement Alarm
{
height = 15;
width = 5;
@Override
void close()
{}
@Override
void open()
{}
@Override
void alarm()
{}
}
简单的描述就是:我的门是普通门,你的门是一个门,但是在普通门基础上增加了响铃行为。
本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦: