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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈宣龙 中级黑马   /  2013-2-17 11:59  /  5023 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈宣龙 于 2013-2-18 21:59 编辑

  1. public interface Car{  
  2. String getName();
  3. }  
  4. public interface Airplane{  
  5. String getName();
  6. }  
  7. public class FlyCar implements Car, Airplane {  
  8. public String getName(){
  9. //两个接口有相同的方法,写一个方法实现是否会出现歧义,如果两个接口的相同方法返回类型不同,那岂不是没有办法写了? 还是这样的情况基本不会出现?
  10. }
  11. }  
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 王昕 于 2013-2-17 12:40 编辑

有接口就是为了避免C++多重继承里你说的这种复杂的情况,这在多重继承里叫“致命方块”。所以Java没有多重继承,接口的方法都是抽象的,所以继承接口的方法FlyCar还得自己实现继承自接口的方法,然后才能创建FlyCar的对象。
接口里的方法默认都带public abstract修饰,所以可以省略不写,但是实际都是。
接口就是为了多态,因为方法都是抽象的,都得自己实现。所以继承的时候只有一种实现,不会出现歧义。如果是参数不同,函数名相同,那就是不同的方法,继承的时候要分别实现。
如果两个接口的同名方法参数表列也相同,只有返回值类型不同,那就没法同时继承这两个接口了,会报错,不能这么写。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
炉海佳 来自手机 高级黑马 2013-2-17 15:28:48
藤椅
上楼说得很清楚了,补充一点:函数名相同参数不同就是重载,是可以存在的,你可以看看什么是重载
回复 使用道具 举报
我先说说你贴出的代码的问题,一个java文件中最多只能包含一个public修饰的class或interface,而interface被允许的修饰符只有public和abstract。可以直接在你的当前文件中把两个interface的public修饰符去掉,或将其改成abstract。
对于多个接口中的重名方法,一般情况下很少出现,所以在自定义接口的时候,要多注意方法的命名。
此外,如果要实现两个有重名方法的接口,可以用内部类,实现代码如下
  1. interface Car
  2. {
  3.     String getName();
  4. }
  5. interface Airplane
  6. {
  7.     String getName();
  8. }


  9. public class test implements Car
  10. {
  11.         public String getName()
  12.         {
  13.           return "Car";
  14.         }
  15.      
  16.     private class AirImp implements Airplane
  17.         {
  18.         public String getName()
  19.                 {
  20.            return "Airplane";
  21.         }
  22.     }
  23.     public String getName2()
  24.         {
  25.         Airplane ap = new AirImp();
  26.         return ap.getName();
  27.     }
  28.     public static void main(String rsg[])
  29.         {
  30.         test mi=new test();
  31.         System.out.println(mi.getName());
  32.         System.out.println(mi.getName2());
  33.     }
  34. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
你这不是这麻烦吗?这分明就是让JVM糊涂的事情。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马