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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈龙 高级黑马   /  2012-11-15 08:29  /  2832 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈龙 于 2012-11-15 13:15 编辑

有两个接口,一个抽象类
interface A{}

interface B{}

abstract class C{}

子类既要实现接口又要继承抽象类,可以这么做:
class D extends C implements A,B{}

我的问题是,实现接口和继承抽象类的顺序是否可以颠倒,如下所示
class D implements A,B extends C{},这样也是正确的吗?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

8 个回复

正序浏览
张综 中级黑马 2012-11-15 23:01:48
9#
这样子说吧。一般有继承有实现的时候都是先继承在实现的。这个是一种规范。
回复 使用道具 举报
这个问题不必深究,这是java开发团队开发过程中,制定的一个语法规则。
因为考虑到java只能单继承、多实现的原则,所以先继承,后实现,实现可以实现多个接口写在后边比较直观。
实现接口就是将他接口的所有约定实现出来,继承就是父债子还,实现所有抽象方法或是自己重写父类方法,同时继承和实现即同时进行上述两部,至于public class Xxxx extends A implements B先写extends 还是implements这个没什么原理可言,只要知道编译器要我们这样写才能放我们通过即可。
回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-11-15 12:23 编辑

我说说我的理解吧,不知到对不对哈。
Java是单继续多实现的语言,所以,当想要继承和实现同时存在时,应该先继承,再实现吧;类继承在前,接口实现在后吧。

1、  class D extends C implements A,B{}   //这个是正确的写法;
2、  class D implements A,B extends C{}   //我想这个应该是不允许的吧,虚拟机会报异常的吧;因为毕老师在讲这课的时候,也没有说这种方法是可以的,如果是可以的,毕老师是会告诉我们这种写法的。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
不可以的~这个在编译时期java虚拟机就会判断了。后者在编译期间就报错了。
java是单继承的,但为了扩展功能,可以使类实现多个接口,这样避免了单继承的局限性。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1.楼主问的问题我在dos窗口编译了一下,结果是先继承再实现是正确的,而先实现再继承是错误的。
2.起初我还以为只是个书写顺序问题,都一样呢,现在自己也糊涂了,有哪位知道原因的,麻烦帮帮忙。
回复 使用道具 举报
你编译试试看
回复 使用道具 举报
不可以
class D extends C implements A,B{}//A,B属于C的体系

class D implements A,B extends C{}//这样写,意思是先实现后继承,不合理

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
一个接口可以继承另外一个借口,抽象类是实现接口,这样不行吧。抽象类不能实例化.Java中不会有在各种情况吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马