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

简介: 【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;
// filename 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);
  }
}

点此跳转到答案


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

1.png

问题一答案

输出:

java

复制代码

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 不支持默认参数,所以这不是一个选项。

目录
相关文章
|
4天前
|
存储 安全 算法
【常见集合】Java 常见集合重点解析
【常见集合】Java 常见集合重点解析
8 0
|
2天前
|
缓存 算法 Java
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
|
4天前
|
Java 开发工具 Maven
java解析apk获取应用信息
请注意,你需要替换"path/to/your/apkfile.apk"为你的APK文件的实际路径。
11 0
|
4天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
42 2
|
4天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
17 0
|
4天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
15 1
|
4天前
|
Java
解析java中的数组
解析java中的数组
15 3
|
4天前
|
Java Linux C语言
一步带你了解java程序逻辑控制
一步带你了解java程序逻辑控制
17 2
|
4天前
|
Java 数据安全/隐私保护
java中程序控制的典例
java中程序控制的典例
13 1
|
4天前
|
存储 Java 数据库连接
使用Java开发桌面应用程序
使用Java开发桌面应用程序
21 0

推荐镜像

更多