📌  相关文章
📜  教资会网络 | UGC-NET CS 2017 年 11 月 – III |问题 25(1)

📅  最后修改于: 2023-12-03 15:10:16.526000             🧑  作者: Mango

介绍

教资会网络是印度国家测试机构(National Testing Agency) 负责的一项网络资格认证考试,UGC-NET CS 2017 年 11 月 – III 是其中一次。此考试是针对从事计算机科学的专业人员,旨在测试其计算机科学与应用中的各个领域的知识和技能。如果您想成为一名资深的计算机科学专业人员,或者想在计算机科学行业中找到更好的职业发展机会,教资会网络是一项绝佳的资格认证考试。

问题 25

以下是一段代码:

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类中的新方法,就会出现找不到方法的错误。