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

举报
海拥 发表于 2022/03/18 16:31:32 2022/03/18
【摘要】 相关文章:【Java练习题】Java程序的输出 | 第一套(含解析)难度级别: 简单预测以下 Java 程序的输出。考虑到如果将答案紧接着问题贴出来,同学们可能还没思考就不小心看到了结果,所以我把问题和答案分开放,中间还用东西挡了一下,希望不会给大家带来阅读上的困难 问题 问题一:package main;class Base { public void Print() { System....

相关文章:

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

难度级别: 简单

预测以下 Java 程序的输出。

考虑到如果将答案紧接着问题贴出来,同学们可能还没思考就不小心看到了结果,所以我把问题和答案分开放,中间还用东西挡了一下,希望不会给大家带来阅读上的困难

问题

问题一:

package main;

class Base {
	public void Print()
	{
		System.out.println("Base");
	}
}

class Derived extends Base {
	public void Print()
	{
		System.out.println("Derived");
	}
}

class Main {
	public static void DoPrint(Base o)
	{
		o.Print();
	}
	public static void main(String[] args)
	{
		Base x = new Base();
		Base y = new Derived();
		Derived z = new Derived();
		DoPrint(x);
		DoPrint(y);
		DoPrint(z);
	}
}

点此跳转到答案

问题二:

package main;

// 文件名 Main.java
class Point {
	protected int x, y;

	public Point(int _x, int _y)
	{
		x = _x;
		y = _y;
	}
}

public class Main {
	public static void main(String args[])
	{
		Point p = new Point();
		System.out.println("x = " + p.x + ", y = " + p.y);
	}
}

点此跳转到答案


放张可爱妹子的图缓解一下眼睛疲劳,文章后半部分是程序的输出及解析

在这里插入图片描述


问题一答案

输出:

Base
Derived
Derived

预测第一行输出很容易。我们创建一个 Base 类型的对象并调用 DoPrint()。DoPrint 调用打印函数,我们得到第一行。

DoPrint(y) 导致第二行输出。与 C++ 一样,Java 中允许将派生类引用分配给基类引用。因此,表达式 Base y = new Derived() 在 Java 中是一个有效的语句。在 DoPrint() 中,o 开始引用与 y 引用的对象相同的对象。此外,与 C++ 不同,Java 中的函数默认是虚拟的。因此,当我们调用 o.print() 时,由于 Java 中默认存在的运行时多态性,会调用 Derived 类的 print() 方法。

DoPrint(z) 导致第三行输出,我们传递一个 Derived 类型的引用,并再次调用 Derived 类的 print() 方法。这里要注意的一点是:与 C++ 不同,Java 中不会发生对象切片。因为非原始类型总是通过引用分配的。

问题二答案

输出

Compiler Error

Compiler Error:编译器错误,在上面的程序中,没有访问权限问题,因为 Point 和 Main 在同一个包中,并且一个类的受保护成员可以在同一个包的其他类中访问。代码的问题是:Point 中没有默认构造函数。

与 C++ 一样,如果我们编写自己的参数化构造函数,则 Java 编译器不会创建默认构造函数。因此,对 Point 类进行了以下两项更改,可以修复上述程序。

删除参数化构造函数。
添加一个没有任何参数的构造函数。
Java 不支持默认参数,所以这不是一个选项。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。