黑马程序员技术交流社区

标题: 抽象类和接口有什么区别啊? [打印本页]

作者: 张业婷    时间: 2014-10-1 09:14
标题: 抽象类和接口有什么区别啊?
除了抽象类可以定义方法体,可以定义普通的方法属性,接口不可以这一点以外还有吗?
作者: clevergump    时间: 2014-10-1 14:36
本帖最后由 clevergump 于 2014-10-1 14:38 编辑

一.   楼主所说的
“抽象类可以定义方法体,接口不可以”是指:抽象类中可以有非抽象方法,而接口不可以。
“抽象类可以定义普通的方法属性,接口不可以”是指:抽象类中的属性可以不是 public static final 的,方法可以不是 public abstract 的,而接口中的属性方法却必须是。

二.  总结一下我所知道的二者的区别如下(鉴于水平经验有限,希望其他朋友帮忙补充,总结有误之处也希望其他朋友帮忙指出):
1.  继承实现角度:抽象类属于类,所以只能单继承其他类,也只能被其他类单继承,而接口能被类多实现,接口也能多继承多个接口。
2.  成员修饰符角度:抽象类中的成员属性可以被所有成员属性修饰符修饰(包括:private、protected、public、static、final以及默认修饰符),抽象类中的成员方法可以被所有成员方法修饰符修饰(包括前面括号中提到的所有成员属性修饰符、以及abstract,但abstract不能与static、final同时修饰方法),以上提到的这些修饰符都不具有强制性,可以使用,也可以不使用; 而接口中强制要求属性必须被 public static final 修饰(表示公开常量),方法必须被 public abstract 修饰,即使不显式地加上这些修饰符也会被系统默认隐式地强制加上。
3. 方法的功能角度:抽象类或者更广泛地说,一个类中的方法通常表示该类所描述的事物所具备的基本功能,而接口中定义的方法,通常通过使用一个类实现该接口并复写其中的方法来调用,该方法表示该实现类所描述的事物具备的扩展功能,而非基本功能。用毕老师的话说,就是类中的方法可以说成是这个类 is a (具有)方法所代表的功能,而接口中的方法可以说成是该接口实现类 is like(像) 该方法所代表的功能。

我的水平有限,知道的就这么多,可能有些地方描述有误,希望其他朋友也多指正,谢谢!
作者: 水竹    时间: 2014-10-1 14:49
clevergump 发表于 2014-10-1 14:36
一.   楼主所说的
“抽象类可以定义方法体,接口不可以”是指:抽象类中可以有非抽象方法,而接口不可以。
...

倒数第三行不是is like,应该是like a
作者: clevergump    时间: 2014-10-1 15:14
水竹 发表于 2014-10-1 14:49
倒数第三行不是is like,应该是like a

是的,就是表示“像某某功能”。 另外题外话,like 表示“像”的意思时是介词,需要前面加动词 am 、is、are 作为谓语的。兄弟,国庆快乐!:handshake
作者: 杨佳名    时间: 2014-10-1 15:23
水竹 发表于 2014-10-1 14:49
倒数第三行不是is like,应该是like a

好仔细!
作者: rel4x    时间: 2014-10-2 10:46
学习啦。。。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2