【发布时间】:2016-04-11 07:17:25
【问题描述】:
我有以下类和接口
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
我知道当一个类实现一个接口时,我们需要在类中定义接口方法或声明类抽象。但是,如何通过扩展一个类(使用具有相同签名的已定义方法)来克服这个编译器警告并运行程序。
【问题讨论】:
-
这是因为你从超类继承了这个方法。该方法必须提供,并且通过继承,它是
-
你为什么期待这个?继承意味着
C可以被视为A;而A有那个方法... -
实现
interface会强制您访问类中interface中定义的方法,而不是将其实际写入实现interface的类中。如果该类确实从已经定义了该方法的类继承并且它可以访问它,则条件已满足,因此您无需再次覆盖该方法。
标签: java inheritance interface