请问如何在一个类中实现两个接口,两个接口具有相同的方法?
这是我自己写的能编译运行!
interface cat{
void singer();
};
interface dog{
void singer();
}
public class interface1 implements cat,dog{
public void singer(){
System.out.println(" 唱歌!");
}
public static void main(String[] args){
interface1 t=new interface1();
t.singer();
}
}
若要分别实现dog中的singer的方法,不知如何实现,望指教!

解决方案 »

  1.   

    Ps:  public static void main(String[] args){
           cat c=new interface1();
           dog d=new interface1();
            c.singer();
         }     public void singer(){
           if(c instanceof cat){
             System.out.println(" 猫!");
           }else{
             System.out.println(" 狗!");
            }
         }多态的运用
      

  2.   

    public static void main(String[] args){ 
          cat c=new interface1(); 
          dog d=new interface1(); 
            c.singer(); 
        } 
      

  3.   

    楼主的程序有错误哦,是运行不起来的。
    1楼的 
    public void singer(){ 
          if(c instanceof cat){ 
            System.out.println(" 猫!"); 
          }else{ 
            System.out.println(" 狗!"); 
            } 
    也有错误啊。
      

  4.   

    可以去看LinkedList中的add方法,同一个方法,实际是遵守了来自不同接口的约定: 
    add
    public boolean add(E e)将指定元素添加到此列表的结尾。 
    此方法等效于 addLast(E)。 
    指定者:
    接口 Collection<E> 中的 add
    指定者:
    接口 Deque<E> 中的 add
    指定者:
    接口 List<E> 中的 add
    指定者:
    接口 Queue<E> 中的 add
    覆盖:
    类 AbstractList<E> 中的 add
    参数:
    e - 要添加到此列表的元素 
    返回:
    true(根据 Collection.add(E) 的规定)
      

  5.   

    感觉楼主对于抽象接口有些误解..而且走偏了.如果是上面猫,狗都有的方法,应该把这个行为方法抽象出来..这样的public interface Behaviour{
       public void singer();
    }那么猫的接口就是这样的public class Cat implements Behavour {
           public void singer(){
               //猫叫
         }
           //**其他的方法
    }public class Dog implements Behavour {
       public void singer(){
           //狗吠
      }
      //其他的方法
    }
    public class Test{
      Cat cat  =new Cat();
      cat.singer();//这里猫叫. Dog dog =new Dog();
      dog.singer();//这是是狗吠.
    }
    这样做的好处是,不管是猫叫还是狗吠都不需要更改变猫.或狗的类方法.
      

  6.   

    2楼那不叫多态 ok?多态又叫动态绑定 编译器帮你判断 
    靠你自己判断的不叫多态 ok?
      

  7.   

    此问题貌似违背了java面向接口编程的原则“like a”吧.莫非是猫和狗的变异?
      

  8.   


    // 为了方便,起了一些垃圾名字。
    // 如果定义的接口中有相同的方法,最好再定义一个接口单独存储。
    interface Animal{
        void singer();
    }
    interface Cat extends Animal {
        void shangshu();
        //void singer();
    }
    interface Dog extends Animal {
        void kengutou();
        //void singer();    
    }
    // 实现多接口
    class Guaiwu implements Cat, Dog {
        public void singer(){
            System.out.println("怪物叫唤");
        }    public void shangshu(){
            System.out.println("怪物上树");
        }    public void kengutou(){
            System.out.println("怪物啃骨头");
        }
    }
    // 实现单接口
    class Catc implements Cat {
        public void singer(){
            System.out.println("猫叫唤");
        }    public void shangshu(){
            System.out.println("猫上树");
        }
    }
      

  9.   

    如果你维护的是一个大型的ERP项目,可能会出现要实现的两个接口方法同名的情况,原因是,两个接口原先作用于不同的模块,可能定义了同名的方法。后来由于业务需要,需要引用另一个模块的一些已经实现的功能,则要实现另一个模块的接口,会造成两个接口的方法同名。事实上接口只是声明,它的实现由接口的实现类完成,实际使用的只是实现类的实例。每个实现类可以有自己不同的描述。不会造成问题,虽然看着比较奇怪。
    interface cat{
        void singer();
    };
    interface dog{
        void singer();    
    }
    public class interface1 implements cat,dog{
        public void singer(){
            System.out.println(" 唱歌!");
        }
       }
    public class interface2 implements cat,dog{
        public void singer(){
            System.out.println(" 唱国歌~~~!");
        }
       }
    public class Test {
        public static void main(String[] args){
            cat t1 = new interface1();
            dog t2 = new interface2();
            t1.singer();
            t2.singer();
        }}