如果一个类正在实现两个接口,那么实际上是java中该类的父接口

时间:2015-09-02 08:47:41

标签: java interface multiple-inheritance

如果一个类正在实现两个接口,那么接口实际上是Java中该类的父接口

interface A  { 
    void m1(); 
}

interface B {
    void  m1(); 
}


public class C implements A,B {

    public void m1() {
        System.out.println("m1 method !!!");
    }


    public static void main(String[] args) {
         C obj = new  C();
         obj.m1();                     
         ((A)obj).m1();            
         ((B)obj).m1();           

         A objAsA = (A)obj;
         objAsA.m1();               

         B objAsB = (B) obj ;
         objAsB.m1();              
     }

}

6 个答案:

答案 0 :(得分:3)

Java中没有“实际的父接口”这样的概念。所有接口都与类的超类型相同。即使在两个接口声明相同方法签名的情况下,这也不会改变:C中的相同方法同时实现AB

顺便说一下,你不需要一个演员来完成一个上传:

A objAsA = obj;
objAsA.m1();               

B objAsB = obj;
objAsB.m1();              

答案 1 :(得分:1)

parent是与extension而非implementation相关的概念。

答案 2 :(得分:1)

你的问题没有意义。你没有父母' java中的接口。 界面就像合同,你承诺'提供界面中列出的方法。你正在获得与接口混合的继承。

继承是一个类继承另一个类的一部分的地方。 喜欢狗 - >赫斯基,狗 - >贵宾犬

接口是每个Animal都承诺有一个名为public String getSpecies()的方法。

如果你想找到一个类看到这个问题的所有接口。 Determining the extended interfaces of a Class

<小时/> 虽然界面可以扩展其他界面,但正常情况下,界面会正常。 class没有父接口的概念。 感谢akhil发现这一点。

您可以将子课程视为其父母的专业,每个级别更具体。 动物 - &gt;狗 - &gt;沙哑。然而,每个较低级别的兄弟姐妹都有一些共同的功能。所有狗都可以吠(),所有动物都可以移动()。

现在尝试将此逻辑应用于接口,您会发现它并不真正有意义。存在一个接口只是为了确保每个类都具有特定的能力。所有动物都需要呼吸,无论种类如何,都可以使动物实施透气。这确保每只动物都有一种方法呼吸()。

答案 3 :(得分:0)

来自Java Java Specification

interface Fish  { int getNumberOfScales(); }
interface Piano { int getNumberOfScales(); }
class Tuna implements Fish, Piano {
    // You can tune a piano, but can you tuna fish?
    public int getNumberOfScales() { return 91; }
}
  

Tuna类中的getNumberOfScales方法具有与接口Fish中声明的方法匹配的名称,签名和返回类型,并且还与接口Piano中声明的方法匹配;它被认为是实现两者。

因此,我们认为您实施 BOTH

答案 4 :(得分:0)

此类C同时实现了接口以及C is AC is B

答案 5 :(得分:0)

实现意味着您需要在班级中使用该方法。所以没有它的父母。通过延伸,这可以是,但是那时不能有2个父母到1个班级。例如:

public static void main(String[] args){
    C c = new C();
    c.m1();
}

class A {
    public void m1() {
        System.out.println("A printing");
    }
}

class B {
    public void m1() {
        System.out.println("B printing");
    }
}

class C extends A {
    public void m1() {
        System.out.println("C print");
    }
}

打印:&#34; C打印&#34;

C不能同时延长B.但它确实覆盖了A类的方法。如果C不包含方法&#34; m1()&#34;然后使用A类的方法,控制台将打印:&#34;打印&#34;

相关问题