黑马程序员技术交流社区

标题: 子类实现接口,以及继承抽象类的顺序 [打印本页]

作者: 陈龙    时间: 2012-11-15 08:29
标题: 子类实现接口,以及继承抽象类的顺序
本帖最后由 陈龙 于 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{},这样也是正确的吗?

作者: 崔利鹏    时间: 2012-11-15 08:49
一个接口可以继承另外一个借口,抽象类是实现接口,这样不行吧。抽象类不能实例化.Java中不会有在各种情况吧
作者: 化小东    时间: 2012-11-15 09:09
不可以
class D extends C implements A,B{}//A,B属于C的体系

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

作者: 杨建峰    时间: 2012-11-15 09:15
你编译试试看
作者: 刘菲    时间: 2012-11-15 09:19
1.楼主问的问题我在dos窗口编译了一下,结果是先继承再实现是正确的,而先实现再继承是错误的。
2.起初我还以为只是个书写顺序问题,都一样呢,现在自己也糊涂了,有哪位知道原因的,麻烦帮帮忙。
作者: 王玮    时间: 2012-11-15 09:57
不可以的~这个在编译时期java虚拟机就会判断了。后者在编译期间就报错了。
java是单继承的,但为了扩展功能,可以使类实现多个接口,这样避免了单继承的局限性。
作者: 黑马周磊    时间: 2012-11-15 11:28
本帖最后由 吴愿涛 于 2012-11-15 12:23 编辑

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

1、  class D extends C implements A,B{}   //这个是正确的写法;
2、  class D implements A,B extends C{}   //我想这个应该是不允许的吧,虚拟机会报异常的吧;因为毕老师在讲这课的时候,也没有说这种方法是可以的,如果是可以的,毕老师是会告诉我们这种写法的。
作者: 奋斗的青春    时间: 2012-11-15 12:21
这个问题不必深究,这是java开发团队开发过程中,制定的一个语法规则。
因为考虑到java只能单继承、多实现的原则,所以先继承,后实现,实现可以实现多个接口写在后边比较直观。
实现接口就是将他接口的所有约定实现出来,继承就是父债子还,实现所有抽象方法或是自己重写父类方法,同时继承和实现即同时进行上述两部,至于public class Xxxx extends A implements B先写extends 还是implements这个没什么原理可言,只要知道编译器要我们这样写才能放我们通过即可。

作者: 张综    时间: 2012-11-15 23:01
这样子说吧。一般有继承有实现的时候都是先继承在实现的。这个是一种规范。




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