【Java练习题】Java 程序的输出 | 第二十四套(继承)

简介: 【Java练习题】Java 程序的输出 | 第二十四套(继承)

难度级别: 简单

程序

程序一


1) 以下程序的输出是什么?

class Base {
    public void show() {
       System.out.println("Base::show() called");
    }
}
  
class Derived extends Base {
    public void show() {
       System.out.println("Derived::show() called");
    }
}
  
public class Main {
    public static void main(String[] args) {
        Base b = new Derived();;
        b.show();
    }
}

a) Derived::show() called

b) Base::show() called

点此跳转到答案


程序二


2) 以下程序的输出是什么?

class Base {
    final public void show() {
       System.out.println("Base::show() called");
    }
}
  
class Derived extends Base {
    public void show() {
       System.out.println("Derived::show() called");
    }
}
  
class Main {
    public static void main(String[] args) {
        Base b = new Derived();;
        b.show();
    }
}

image.png

点此跳转到答案


程序三


3) 以下程序的输出是什么?

class Base {
    public static void show() {
       System.out.println("Base::show() called");
    }
}
class Derived extends Base {
    public static void show() {
       System.out.println("Derived::show() called");
    }
}
class Main {
    public static void main(String[] args) {
        Base b = new Derived();;
        b.show();
    }
}

image.png

点此跳转到答案


问题四


4) 关于 Java 中的继承,下列哪项是正确的?

1) 私有方法是最终的。
2) 受保护的成员可以在包内访问,在包
   外继承类。
3) 受保护的方法是最终的。
4)我们不能覆盖私有方法。

image.png

点此跳转到答案


程序五


5) 以下程序的输出是什么?

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);
    }
}

image.png

点此跳转到答案


问题六


6) 预测以下程序的输出。请注意, fun() 在 base 中是 public ,而在衍生中是 private 。

class Base {
    public void foo() { System.out.println("Base"); }
}
class Derived extends Base {
    private void foo() { System.out.println("Derived"); } 
}
public class Main {
    public static void main(String args[]) {
        Base b = new Derived();
        b.foo();
    }
} 

image.png

点此跳转到答案


问题七

下列关于 Java 继承的说法正确的是 
1) 在 Java 中,所有类都直接或间接地从 Object 类继承。Object 类是所有类的根。
2) Java 中不允许多重继承。
3) 与 C++ 不同的是,Java 中没有像继承类型那样可以指定继承是受保护的、公共的还是私有的。

image.png

点此跳转到答案


程序八


8) 以下程序的输出是什么?

class Grandparent {
    public void Print() {
        System.out.println("Grandparent's Print()");
    }
}
class Parent extends Grandparent {
    public void Print() {
        System.out.println("Parent's Print()");
    }
}
class Child extends Parent {
    public void Print() {
        super.super.Print(); 
        System.out.println("Child's Print()");
    }
}
public class Main {
    public static void main(String[] args) {
        Child c = new Child();
        c.Print();
    }
}

image.png

点此跳转到答案image.png


程序九


9) 以下程序的输出是什么?

final class Complex {
    private final double re;
    private final double im;
    public Complex(double re, double im) {
        this.re = re;
        this.im = im;
    }
    public String toString() {
        return "(" + re + " + " + im + "i)";
    }
}
class Main {
  public static void main(String args[])
  {
       Complex c = new Complex(10, 15);
       System.out.println("Complex number is " + c);
  }         
}

image.png

点此跳转到答案


文章后半部分是程序的输出及解析

image.png


输出及解析

程序一输出


输出

a

说明

在上面的程序中,b 是一个 Base 类型的引用,指的是一个 Derived 类的对象。在 Java 中,函数默认是虚拟的。所以运行时多态发生并调用派生的 fun()。


程序二输出


输出

C

说明

最终方法不能被覆盖。


程序三输出


答案

A

说明

与 C++ 一样,当函数是静态的时,不会发生运行时多态性。


程序四答案

答案

A

程序五答案

答案

A

说明:

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


程序六答案

答案

C

说明:

对覆盖基类函数的派生类函数进行更严格的访问是编译器错误。


问题七答案

答案

C

说明:

参见 C++ 和 Java 中继承的比较


程序八答案

答案

A

说明:

在 Java 中,不允许执行 super.super。我们只能使用 Parent 访问祖父母的成员。例如,以下程序运行良好。

// 猜测输出
// 文件名 Main.java 
class Grandparent { 
    public void Print() { 
        System.out.println("Grandparent's Print()"); 
    } 
} 
class Parent extends Grandparent { 
    public void Print() { 
      super.Print();  
        System.out.println("父母的打印()"); 
    } 
} 
class Child extends Parent { 
    public void Print() { 
        super.Print();  
        System.out.println("孩子的打印()"); 
    } 
} 
class Main { 
    public static void main(String[] args) { 
        Child c = new Child(); 
        c.打印();
    }
}

问题九答案

答案

A

以上就是本篇文章的所有内容了

目录
相关文章
|
21天前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
6天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
11 3
|
6天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
19 2
|
6天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
16 2
|
6天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
16 1
|
11天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
24 2
|
14天前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
|
17天前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
19 2
|
17天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
24 1
|
14天前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第6天】Java零基础教学篇,手把手实践教学!
17 0