如果一个类正在实现两个接口,那么接口实际上是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();
}
}
答案 0 :(得分:3)
Java中没有“实际的父接口”这样的概念。所有接口都与类的超类型相同。即使在两个接口声明相同方法签名的情况下,这也不会改变:C
中的相同方法同时实现A
和B
。
顺便说一下,你不需要一个演员来完成一个上传:
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 A
和C 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;