Java基础面试题:访问修饰符与匿名内部类解析

4星 · 超过85%的资源 需积分: 3 7 下载量 78 浏览量 更新于2024-09-22 收藏 48KB DOC 举报
"Java面试题,涵盖访问修饰符和匿名内部类的相关知识,适用于应届毕业生的面试准备。" 在Java编程语言中,访问修饰符是用于控制类、接口、字段和方法的可见性和访问权限的关键元素。以下是四种主要的访问修饰符及其详细解释: 1. **public** - 公共访问修饰符,被声明为public的类、接口、方法或字段可以在任何地方被访问,不受包的限制。 2. **private** - 私有访问修饰符,只允许在声明它的同一个类内部访问。这意味着在其他类(包括子类)中都无法直接访问private成员。 3. **protected** - 保护访问修饰符,允许在同一包内的任何类以及不同包中的子类访问。这是一种平衡隐私与继承需求的方式。 4. **缺省/friendly** - 如果不指定任何访问修饰符,那么它就是缺省的访问级别。这种情况下,成员只对同一包内的类可见,外部包的类无法直接访问。 访问权限的总结如下: | 访问修饰符 | 当前类 | 同一package | 子孙类 | 其他package | | :---------: | :----: | :---------: | :----: | :---------: | | public | √ | √ | √ | √ | | protected | √ | √ | √ | × | | friendly | √ | √ | × | × | | private | √ | × | × | × | 接下来,我们讨论一下**匿名内部类**,这是一个在Java中创建类的特殊方式,没有类名且通常用于简短的、一次性的实现。匿名内部类可以: - **不继承其他类**,但是它可以实现一个或多个接口。这意味着它可以满足多态性需求,无需定义一个新的独立类。 - **没有构造函数**,它依赖于其创建上下文(通常是父类的构造函数)来实例化。 - **通过覆盖父类方法实现功能**,这体现了多态性原则,即子类可以重写父类的行为。 - **不能进行向下转型**,因为没有类名,所以持有匿名内部类对象的变量只能是其直接或间接父类类型。 匿名内部类的声明和实例化通常是结合在一起的,如`new InterfaceName() { /* 类体 */ }` 或 `new ClassName() { /* 类体 */ }`。在运行时,每次new操作都会创建匿名类的一个实例,即使在循环中也是如此,这意味着每个实例都有自己的类副本,而不是共享一个类。 匿名类在技术上类似于非静态内部类,因此它们具有与方法内声明的非静态内部类相同的权限和限制。例如,它们可以访问外部类的私有成员,但不能包含静态初始化器或声明静态成员(除非它们是常量)。这种特性使得匿名内部类在需要短暂、特定情境的类实现时非常有用,尤其是在事件处理和回调机制中。