难度等级: 中等
预测以下 Java 程序的输出:
问题 1
// 文件名: Main.java
class Base {
protected void foo() {}
}
class Derived extends Base {
void foo() {}
}
public class Main {
public static void main(String args[]) {
Derived d = new Derived();
d.foo();
}
}
输出:编译器错误 foo() 在 Base 中受保护,在 Derived 中为默认值。默认访问限制更多。当派生类覆盖基类函数时,不能对被覆盖的函数给予更严格的访问。如果我们将 foo() 设为 public,则程序运行良好,没有任何错误。C++ 中的行为是不同的。C++ 允许对派生类方法进行更严格的访问。
问题2
// 文件名: Main.java
class Complex {
private double re, im;
public String toString() {
return "(" + re + " + " + im + "i)";
}
Complex(Complex c) {
re = c.re;
im = c.im;
}
}
public class Main {
public static void main(String[] args) {
Complex c1 = new Complex();
Complex c2 = new Complex(c1);
System.out.println(c2);
}
}
输出:“Complex c1 = new Complex();”一行中的编译器错误
在 Java 中,如果我们编写自己的复制构造函数或参数化构造函数,则编译器不会创建默认构造函数。此行为与 C++ 相同。
相关文章:
我已经写了很长一段时间的技术博客,这是我的一篇Java练习题文章。希望你们会喜欢! 更多相关文章及我的联系方式我放在这里:
github.com/wanghao221
gitee.com/haiyongcsdn…
如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦