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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牛合超 中级黑马   /  2013-3-11 20:59  /  1996 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 牛合超 于 2013-3-12 12:49 编辑

要是一个类继承了一个类,同时实现了一个接口,
为什么implements 只能在extends 关键字之后,反过来为什么报错呢,,

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
如果父类和接口有同样的方法的话 子类从父类继承的方法可以用来实现接口 所以要先继承了才好实现
你看下面Sub实现了Interf,不实现say方法编译也没错
Java code
public interface Interf {
    public void say();
}

Objective C code
public class Sub extends Base implements Interf{

}

因为Base类实现了
Java code
public class Base {
    public void say(){
        System.out.println("speak");
    };
}

但是即使是先implements再extends编译器如果愿意的话也一样能处理 我猜这样规定是为了告诉你这个先后顺序或者是利于阅读

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
反过来不就成了接口 继承 类了么

接口内 只有抽象abstract 的成员 没有具体方法,继续定义了子类可沿用或者覆写父类方法,接口没有具体方法 就没法继承

这种问题,就别较真,你跟自己过不去啊。没事别问为啥手写字,干嘛用键盘敲,虽然有了手写板,你一样可以输入内容一样。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
要是一个类继承了一个类,同时实现了一个接口,
为什么implements 只能在extends 关键字之后,反过来为什么报错呢,,

这个问题其实在JAVA中不止出现一次,比如可变参数中也是这样的,int(int da,byte...d),这里也是可变的只能放在后面,因为后面的可变性比较大,而在你这个问题当中,
也是同样的道理,JAVA是单继承的,继承只有一个,而实现可以是多个,从由简单到复杂的角度说,当然是先把简单的写在前面,避免和后面复杂的或者是多的混合,容易造成
混乱。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
你说的应该是 zi extends fu implements interdemo 是正确的,但是 zi implements interdemo extends fu 就是错误的,对吗?

  1. public class Outer {

  2.        
  3.                 public static void main(String[] args) {
  4.                   
  5.                   
  6.                    Zi erzi = new Zi();
  7.                     erzi.dajia();
  8.                     erzi.eat();
  9.                     erzi.shuaige();
  10.                   
  11.                 }
  12.                 }
  13.    
  14. class Fu{
  15.         public void shuaige(){
  16.                 System.out.println("我是一个帅哥");
  17.         }
  18. }
  19. class Zi extends Fu implements chifan{
  20. //如果这句话 implement和extends交换就是错的,子类继承父类实现接口,        这是java的语法规定。
  21. public void dajia(){
  22.                 System.out.println("我爱打架,但是不敢打我爸");
  23.         }

  24.         @Override
  25.         public void eat() {
  26.                 System.out.println("我爱吃红烧肉");
  27.                
  28.         }
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 恭喜25分~

查看全部评分

回复 使用道具 举报
如果觉得答案满意,请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马