说出下面程序的执行结果:
interface InterfaceA {
String S = "good ";
void f();
}
abstract class ClassA {
abstract void g();
}
class ClassB extends ClassA implements InterfaceA {
void g() {
System.out.print(S);
}
public void f() {
System.out.print(" "+ S);
}
}
public class Test {
public static void main(String[] args) {
ClassA a = new ClassB();
InterfaceA b = new ClassB();
a.g();
b.f();
}
}
good good
Class B 继承了一个抽象类ClassA并覆写了其中的抽象方法 g() 方法
同时它继承了一个接口InterfaceA同时覆写了其中的 f() 方法
此时通过向上转型创建classA的实例化对象,然后a.g(),调用ClassA中g()方法,由于此方法被ClassB类覆写,所以调用覆写后的方法。
此时通过向上转型创建Interface A的实例化对象,然后b.g(),调用Interface A中f()方法,由于此方法被ClassB类覆写,所以调用覆写后的方法。
打印出的结果就为: good good