📅  最后修改于: 2023-12-03 14:58:17.877000             🧑  作者: Mango
在GATE 2017 MOCK II中,有一个与程序员有关的问题,编号为37。本问题涉及一个编程问题,需要针对给定的代码进行分析和修改。以下是问题的详细描述:
class A {
public void print() {
System.out.pirntln("Class A");
}
}
class B extends A {
public void print() {
System.out.println("Class B");
}
}
public class Main {
public static void main(String[] args) {
A obj1 = new A();
A obj2 = new B();
obj1.print();
obj2.print();
}
}
请根据上述提供的代码完成以下任务:
上面给出的代码段涉及了继承和多态的概念。根据Java中的多态性,当子类对象引用赋值给父类引用时,可以运行时绑定(以父类方法为名称的方法),这表示在运行时会根据对象类型调用相应的方法。
在main
方法中,我们首先创建了一个A
类的对象obj1
,然后创建了一个B
类的对象obj2
。接着分别调用两个对象的print
方法。
对于obj1.print()
,由于obj1
的编译时类型是A
,所以它调用的是A
类中的print
方法。因此,输出结果为 "Class A"。
对于obj2.print()
,由于obj2
的编译时类型是A
,但其运行时类型是B
,所以它会调用B
类中重写的print
方法。因此,输出结果为 "Class B"。
解析任务一的结果是 "Class A" 和 "Class B"。
要使代码输出 "Class A" 两次,我们需要修改B
类的print
方法。我们可以手动添加一个新的A
类实例,并在print
方法中调用其print
方法。
class B extends A {
public void print() {
super.print();
System.out.println("Class B");
}
}
在B
类的print
方法中,我们首先使用super.print()
调用父类的print
方法,这将输出 "Class A"。然后,我们输出 "Class B"。这样就可以实现输出 "Class A" 两次的要求。
修改后的代码如下所示:
class A {
public void print() {
System.out.println("Class A");
}
}
class B extends A {
public void print() {
super.print();
System.out.println("Class B");
}
}
public class Main {
public static void main(String[] args) {
A obj1 = new A();
A obj2 = new B();
obj1.print();
obj2.print();
}
}
输出结果为:
Class A
Class A
这就是修改后的代码输出 "Class A" 两次。
希望上述信息能对你有所帮助。请记得使用Markdown格式返回结果。