java什么时候用抽象类,什么时候用接口

[来源] 达内    [编辑] 达内   [时间]2012-08-30

java什么时候用抽象类,什么时候用接口

关于什么时候用抽象类,什么时候用接口,我在这里做一下总结。

首先看下面的例子:
Java代码
1. abstract class AbstractStudent{
2.
3. abstract void study();
4.
5. void sleep(){
6.
7. System.out.println("sleep");
8.
9. }
10.
11. void smoke(){
12.
13. System.out.println("抽烟");
14.
15. }
16.
17. }
18.
19. //所有的Student被创建都会抽烟,是不是很搞笑?
20.
21. class Student extends AbstractStudent{
22.
23. Student Demo stu = new Student();
24.
25. ...
26.
27. }

上面这个学生抽象类中有三个方法,学习,睡觉,抽烟。我们知道任何一个学生都要学习,都要睡觉,但是不是
每个学生都要抽烟呢?这显然是不合理的。难道说创建一个学生对象,就一定要强加给他抽烟的方法?就像一个
学生来了,就一定要他会抽烟?女生也不放过?哈哈!这显然是很荒唐的事情。
于是我们做如下调整:
Java代码
1. abstract class AbstractStudent{
2.
3. abstract void study();
4.
5. void sleep(){
6.
7. System.out.println("sleep");
8.
9. }
10.
11. }
12.
13. interface Smoking{
14.
15. void smoke();
16.
17. }
18.
19.
20.
21. //普通的学生,继承AbstractStudent,有学习、睡觉的方法,不抽烟
22.
23. class Student extends AbstractStudent{
24.
25.
26.
27. }
28.
29.
30.
31. //抽烟的学生,除了继承AbstractStudent中的方法,还会抽烟
32.
33. class SmokeStudent extends AbstractStudent implements Smokeing{
34.
35.
36.
37. }

Java代码
1.
这样,就把抽烟的同学和不抽烟的同学分离开了。 现在你感觉到了抽象类与接口的不同点了吗?


总结:抽象类中通常放的是类种事物(对象)共有的属性和方法,于是它的子类继承它的时候
就自然有了其所有属性和方法,当有些方法是某种子类特有的时,就应该将这个方法分离出来,
以附加的形式(implements)添加进去。

资源下载