Java内部类详解:访问控制与类型

需积分: 9 2 下载量 135 浏览量 更新于2024-08-25 收藏 2.14MB PPT 举报
"Java内部类和包装类的访问控制修饰符以及各类别详解" Java内部类是一种特殊的设计,它可以被定义在另一个类的内部,提供了一种强大的封装机制。内部类分为四种类型:成员内部类(非静态内部类)、静态内部类、局部内部类和匿名内部类。每种类型的内部类都有其特定的使用场景和访问规则。 1. **访问控制修饰符对成员内部类的影响** - **private**:被private修饰的内部类只能在外部类的成员中访问,不能被外部类之外的任何代码访问。 - **default(无修饰符)**:默认情况下,内部类可以被同包内的其他类访问,但不能被不同包的类访问。 - **protected**:使用protected修饰的内部类除了可以被同包内的类访问,还可以被外部类的子类访问,无论子类是否在同一包内。 - **public**:public修饰的内部类可以被任何地方的代码访问,没有访问限制。 2. **成员内部类(非静态内部类)** - 成员内部类与外部类的关系紧密,必须先创建外部类的对象才能创建内部类的对象。它们之间可以互相访问所有成员,包括私有成员。 - 创建成员内部类对象的语法:`外部类对象.内部类对象 = new 外部类().new 内部类();` 3. **静态内部类** - 静态内部类不依赖外部类的对象,可以直接通过类名创建对象。 - 它不能直接访问外部类的非静态成员,但可以通过外部类的对象访问。 - 创建静态内部类对象的语法:`外部类.内部类对象 = new 外部类.内部类();` 4. **局部内部类** - 局部内部类仅在定义它的方法或块的范围内有效,无法在方法或块之外访问。 - 它可以访问定义它的作用域内的所有变量,包括局部变量,但必须是final的。 5. **匿名内部类** - 匿名内部类没有名字,通常用于简化代码,例如快速实现一个接口或继承一个类。 - 必须直接实现一个接口或继承一个类,并且只能使用一次。 - 创建匿名内部类的语法:`new 父类或接口() { ... }` 6. **内部类的特性** - 内部类可以有多个实例,每个实例都有自己的状态,与其他外部对象的信息独立。 - 同一个外部类可以有多个内部类实现相同接口或继承相同父类,提供多种实现方式。 内部类的使用极大地增加了代码的灵活性和封装性,使得复杂的逻辑结构得以清晰地组织。在设计模式中,比如单例模式、策略模式等,内部类常常扮演关键角色。理解并熟练运用内部类可以提升Java编程能力,更好地应对复杂问题。