A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张业婷 中级黑马   /  2014-10-1 09:14  /  1030 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

除了抽象类可以定义方法体,可以定义普通的方法属性,接口不可以这一点以外还有吗?

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 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(像) 该方法所代表的功能。

我的水平有限,知道的就这么多,可能有些地方描述有误,希望其他朋友也多指正,谢谢!

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1

查看全部评分

回复 使用道具 举报
clevergump 发表于 2014-10-1 14:36
一.   楼主所说的
“抽象类可以定义方法体,接口不可以”是指:抽象类中可以有非抽象方法,而接口不可以。
...

倒数第三行不是is like,应该是like a
回复 使用道具 举报 1 0
水竹 发表于 2014-10-1 14:49
倒数第三行不是is like,应该是like a

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

好仔细!
回复 使用道具 举报
学习啦。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马