我有以下类和接口
public class A {
public void printSomething() {
System.out.println("printing from A");
}
}
interface B {
public void printSomething();
}
public class C extends A implements B {
public static void main(String aa[]) {
C c = new C();
c.printSomething();
}
}
当我编译上面的代码时,它编译没有任何错误。当我运行该程序时,它会打印以下内容。
printing from A
我当时期待编译器给出类似的错误,就像我的C 类没有扩展>> A类时我得到的错误一样
C.java:1: error: C is not abstract and does not override abstract method printSomething() in B public class C implements B{
^
C.java:8: error: cannot find symbol
c.printSomething();
^
symbol: method printSomething()
location: variable c of type C
2 errors
我知道当一个类实现一个接口时,我们需要在类中定义接口方法或声明类抽象。但是,通过扩展一个类(使用相同签名的已定义方法),我能够克服此编译器警告并运行该程序。
答案 0 :(得分:0)
这是因为C是A的子级。每当Child默认承包商被执行时,其父构造函数被调用(这是为了继承A的所有属性)。 在这种情况下,"新的C()"使A()的所有属性都可用于C类,包括printSomething()。
答案 1 :(得分:0)
这是因为,通过将class A
扩展为class C
,您实际上为printSomething()
的{{1}}方法提供了实现。
请注意:,interface B
包含class A
方法的实现。