📅  最后修改于: 2023-12-03 15:10:16.526000             🧑  作者: Mango
教资会网络是印度国家测试机构(National Testing Agency) 负责的一项网络资格认证考试,UGC-NET CS 2017 年 11 月 – III 是其中一次。此考试是针对从事计算机科学的专业人员,旨在测试其计算机科学与应用中的各个领域的知识和技能。如果您想成为一名资深的计算机科学专业人员,或者想在计算机科学行业中找到更好的职业发展机会,教资会网络是一项绝佳的资格认证考试。
以下是一段代码:
class Base {
void method1() throws Exception {
System.out.println("Base Method1");
}
}
class Derived extends Base {
void method1() {
System.out.println("Derived Method1");
}
void method2() {
System.out.println("Derived Method2");
}
}
class Test {
public static void main(String[] args) throws Exception {
Base b = new Derived();
b.method1();
//b.method2(); // 编译错误
}
}
问题:如果将注释行去除,将会发生什么情况?
这段代码定义了三个类,Base是父类,Derived是其子类,Test是一个包含main方法的测试类。在主方法中,我们创建了一个Derived的对象并将它赋值给Base对象类型的引用变量b。由于Derived是Base的子类,它继承了method1方法。但是Derived还定义了一个新的方法method2。
如果我们将注释行去除,试图调用b.method2()这个方法,就会出现编译错误。这是因为在这个程序中,变量b是Base类型的引用,它只知道基类中的方法,而不知道导出类中的新方法。因此,变量b不能引用Derived类中的method2(), 导致编译器报告找不到方法的错误。
因此,当我们尝试调用Derived类中的新方法时,编译器就会报出找不到这个方法的错误。
class Base {
void method1() throws Exception {
System.out.println("Base Method1");
}
}
class Derived extends Base {
void method1() {
System.out.println("Derived Method1");
}
void method2() {
System.out.println("Derived Method2");
}
}
class Test {
public static void main(String[] args) throws Exception {
Base b = new Derived();
b.method1();
b.method2(); // 编译错误
}
}
如上所述,如果您尝试调用Derived类中的新方法,就会出现找不到方法的错误。