【Java练习题】Java程序的输出 | 第四套(含解析)

2,024 阅读1分钟

难度等级: 中等

预测以下 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练习题】Java程序的输出 | 第一套(含解析)

【Java练习题】Java程序的输出 | 第二套(含解析)

【Java练习题】Java程序的输出 | 第三套(含解析)

【Java练习题】Java程序的输出 | 第四套(含解析)

我已经写了很长一段时间的技术博客,这是我的一篇Java练习题文章。希望你们会喜欢! 更多相关文章及我的联系方式我放在这里:

github.com/wanghao221
gitee.com/haiyongcsdn…

如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦