第24章测试

Java访问修饰符掌握程度测试

测试说明

本测试包含10道关于Java访问修饰符的选择题,涵盖public、private、protected和默认访问权限的概念、用法和最佳实践。每题只有一个正确答案,完成后可查看详细解析。

10
题目总数
15
建议时间(分钟)
70%
及格分数
1
以下哪个访问修饰符提供最严格的访问控制?

解析

正确答案:C. private

private修饰符提供最严格的访问控制,只允许在同一个类内部访问。这是实现数据封装的重要手段,可以隐藏类的内部实现细节,防止外部直接访问和修改。

2
在以下代码中,哪个访问修饰符允许子类访问父类成员?
public class Parent { public int publicField; protected int protectedField; int defaultField; private int privateField; } class Child extends Parent { // 子类可以访问哪些字段? }

解析

正确答案:C. public、protected和默认

在同一个包中,子类可以访问父类的public、protected和默认访问权限的成员。private成员只能在定义它的类内部访问,子类无法直接访问。如果子类在不同包中,则只能访问public和protected成员。

3
以下关于默认访问权限(包访问权限)的描述,哪个是正确的?

解析

正确答案:B. 只能在同一个包中访问

默认访问权限(也称为包访问权限)意味着成员只能在同一个包中的类访问。这提供了包级别的封装,适用于包内部的协作,但不允许跨包访问。

4
在以下代码中,编译会出现什么结果?
package com.example.a; public class ClassA { private int privateField = 10; protected int protectedField = 20; } package com.example.b; import com.example.a.ClassA; public class ClassB extends ClassA { public void test() { System.out.println(privateField); // 行1 System.out.println(protectedField); // 行2 } }

解析

正确答案:B. 行1编译错误,行2编译成功

privateField是私有字段,只能在ClassA内部访问,子类ClassB无法访问,所以行1编译错误。protectedField是受保护字段,虽然ClassB在不同包中,但作为ClassA的子类,可以访问继承的protected成员,所以行2编译成功。

5
以下哪种做法符合Java封装的最佳实践?

解析

正确答案:B. 将字段设为private,通过public方法访问

这是Java封装的核心原则:将数据(字段)隐藏起来,通过公共方法(getter/setter)提供受控的访问。这样可以保护数据的完整性,验证输入,并在需要时修改内部实现而不影响外部代码。

6
在接口中,方法的默认访问修饰符是什么?

解析

正确答案:D. public

在接口中,所有方法默认都是public的,即使不显式声明。这是因为接口的目的是定义公共契约,供实现类使用。接口中的字段默认是public static final的。

7
以下代码中,哪个构造方法的访问权限最适合单例模式?
public class Singleton { private static Singleton instance; // 构造方法应该使用什么访问修饰符? _______ Singleton() { // 构造逻辑 } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }

解析

正确答案:D. private

在单例模式中,构造方法应该是private的,这样可以防止外部代码直接创建类的实例。只有通过getInstance()静态方法才能获取唯一的实例,确保单例模式的正确实现。

8
以下关于访问修饰符的组合使用,哪个是错误的?

解析

正确答案:D. public private

一个成员不能同时使用多个访问修饰符。public和private是互斥的,不能同时使用。每个成员只能有一个访问修饰符:public、protected、默认或private中的一个。

9
在以下场景中,最适合使用protected修饰符的是?

解析

正确答案:C. 供子类重写的方法

protected修饰符最适合用于需要被子类访问或重写的方法。它提供了比private更宽松的访问权限,允许子类访问,同时比public更严格,不允许无关的外部类访问。这在设计继承层次结构时非常有用。

10
以下代码的输出结果是什么?
package com.example; class TestClass { public static int publicCount = 0; protected static int protectedCount = 0; static int defaultCount = 0; private static int privateCount = 0; public TestClass() { publicCount++; protectedCount++; defaultCount++; privateCount++; } public void showCounts() { System.out.println("Public: " + publicCount); System.out.println("Protected: " + protectedCount); System.out.println("Default: " + defaultCount); System.out.println("Private: " + privateCount); } } public class Main { public static void main(String[] args) { new TestClass(); new TestClass(); TestClass test = new TestClass(); test.showCounts(); } }

解析

正确答案:A. 所有计数器都是3

在同一个包中,Main类可以访问TestClass的public、protected和默认访问权限的成员。虽然不能直接访问private成员,但private成员可以在TestClass内部(如构造方法和showCounts方法中)被访问。创建了3个TestClass对象,所以所有静态计数器都是3。

0%
请完成测试后查看结果