Java练习题Java程序的输出 | 第二套(含解析)
Posted 海拥✘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 不支持默认参数,所以这不是一个选项。
相关内容
我已经写了很长一段时间的技术博客,这是我的一篇Java练习题文章。希望你们会喜欢!
更多相关文章及我的联系方式我放在这里:
https://github.com/wanghao221
https://gitee.com/haiyongcsdn/haiyong
关注作者公众号【海拥】回复【进群】,免费下载CSDN资源和百度文库资源
如果你真的从这篇文章中学到了一些新东西,喜欢它,收藏它并与你的小伙伴分享。🤗最后,不要忘了❤或📑支持一下哦
以上是关于Java练习题Java程序的输出 | 第二套(含解析)的主要内容,如果未能解决你的问题,请参考以下文章