梳理一下Java内部类:
用途:
1.当一个类A需要访问类B的私有属性时候,可以将A设计为内部类,即保证了B的封装又满足了A的设计需求,并可将A的可见性降到最低。
2.当一个类A只需要被类B使用,可以将A设计为内部类,作用同下。
3.减少顶级类数量,使代码更具可读性。
4.匿名内部类只创建一次,多用于事件处理
非静态内部类:Inner Class
- 初始化方法 Outer.Inner i =outerInstance.new Inner(),需要引用外部类的实例
- 可以访问外部类的属性,包括private等各种访问级别,也包括static变量(且必须final)、方法,且可以通过变量名直接引用外部类的static变量、方法
- 如果内部类变量与外部类变量同名(非静态的变量),则通过Outer.this.outerSanmeVar方式访问
- 非静态内部类因为关联了外部类的实例,所以不能有静态变量、者静态方法、静态代码块、静态内部类!
静态内部类:Static Nested Class
- 可以直接初始化方法 Outer.StaticInner os = new Outer.StaticInner();
- 不能访问外部类的非静态属性,即没有外部类的实例引用,无法使用Outer.this
====局部类和匿名类是非静态内部类的两个特殊情况:
局部类:local classes
- 可以在方法(含静态)和任意{}内部定义类,即局部类,但不能定义局部静态类
- 局部类没有访问权限限定符public/private,但可以为final,和abstract
- 如果局部类定义在static块/方法内,则没有外部类的引用,即无法使用外部类的实例属性等
匿名类:anonymous classes/anonymous inner classes
- 可以在任意{},包括static{}定义使用匿名类
- 初始化:new Interface(){...} 或者 new SuperClass(){....}
- 匿名类因为没有名字所以不能定义构造函数
- 匿名类如果有父类,会调用父类的构造函数,如果构造函数有参数,需要在 new Anony(参数..){..}
- 匿名类可以访问外部类的变量(包括静态),另外:
* 在方法内或{}内时,不能访问外层方法/作用域中的非fianl变量
* 在静态static{}块中时,除了块内final变量,只能访问外部类的static变量(因为没有外部类实例)
参考:
1.Sun Java Tutorials - Nested Classes:
http://java.sun.com/docs/books/tutorial/java/javaOO/nested.html
分享到:
相关推荐
这份"Java思维导图"很可能包含了从基础的面向对象概念到高级特性的全面梳理,帮助开发者构建一个完整的Java类体系认知。 在Java中,类是面向对象编程的基础,它是对象的模板或蓝图,定义了一组具有相同属性(数据...
内部类 反射 序列化 nIo 匿名类 包装类 优先级 引用 语言工具类库 容器类 集合 链表 map 工具类 系统类 日期类 数字类 字符串+正则 流 字符流 字节流 语言特性 继承 封装 多态 JVM 多...
Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、...
本文将对Java基础知识进行系统性的整理和总结,涵盖面向对象、访问控制权限、Final关键字、内部类、集合等多个方面的知识点。 面向对象 面向对象是一种编程范式,Java语言是完全面向对象的,它将一切事物都抽象为...
- **面向对象特性**:Java支持封装、继承、多态等面向对象的基本特性,其中封装使得类的实现细节对外部隐藏,继承允许创建新的类继承已有类的特性,多态则让不同类的对象通过相同接口表达自己的行为。 - **单继承与...
内部类是在另一个类的成员位置定义的类,而局部内部类是在方法或者代码块内定义的类。 #### 局部内部类示例 ```java public void run() { int num = 10; // 在JDK 8中,局部内部类可以访问局部变量,但该变量必须...
### Java基础梳理 #### 第一章 Java概述 Java是一种广泛使用的高级编程语言,以其平台无关性和面向对象的特点闻名。Java程序是由**类(class)**组成的,类是Java的基础单元,它包含了成员(members),主要包括属性...
自己学习Java面向对象时对知识点的整理总结,主要包括:一些关键字、权限修饰符的使用、重载、构造器、代码块、内部类、封装、继承、多态、抽象、javabean、单元测试、包装类Object类、设计模式的理解与总结。...
我们可以使用匿名内部类的方式来实现这个接口: ```java LambdaInterface lambdaInterface = new LambdaInterface() { @Override public int sum(int a, int b) { return a + b; } }; ``` 或者使用Lambda表达式...
### 2017最新Java面试题知识点梳理 #### 一、面向对象编程(OOP) 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用“对象”的概念来组织代码结构。Java作为一种典型的面向对象语言,支持...
### JAVA经典教材笔记知识点梳理 #### 第一章:JAVA概述及开发环境搭建 - **Java学习概述** - Java作为一种广泛使用的编程语言,其学习路径包括掌握基本语法、理解面向对象编程思想、熟悉标准库使用等。 - **JAVA...
### Java重要概念与常见陷阱梳理 #### 一、Java简介 **1.1 Java体系分类** - **JavaSE(Java Platform Standard Edition)**: 标准版,主要用于开发桌面应用程序。 - **JavaEE(Java Platform Enterprise Edition...
这些知识点广泛涵盖Java编程基础,深入到多线程、异常处理、内部类和抽象类等高级话题,是Java面试者必须掌握的重要内容。学习和理解这些内容对于面试成功至关重要,尤其是对于那些希望通过面试展现自己能力的求职者...
本总结旨在梳理Java中的关键字,包括this和super的使用、final修饰符的含义、static关键字的作用、以及abstract的使用规则。 首先,关键字this用于区分成员变量和局部变量。在Java中,如果方法中的参数名称和成员...
根据提供的文件内容,我们可以从中梳理出一些Java编程语言的基础知识点。下面我将详细说明这些知识点。 首先,我们需要了解Java中的类和对象的概念。类是构造对象的模板或蓝图,而对象是类的实例。创建对象时,我们...
### Java企业面试题知识点梳理 #### 一、Java面向对象基础 **1. super()与this()的区别** - **super()**: 是指父类构造器的引用,用于调用父类的构造方法或访问父类的成员。在子类构造器中使用 `super()` 可以调用...
### Java基础课程1知识点梳理 #### 一、面向对象编程(OOP) 面向对象编程是一种软件开发方法论,它强调以对象为核心,通过封装、继承、多态等特性提高代码的可维护性、可重用性和可扩展性。 ##### 1.1 OOP理念 ...
6. Java内部类和异常类 Java允许在一个类内部定义另一个类,称为内部类。异常类则是用于描述Java运行时的错误情况,如ArrayIndexOutOfBoundsException、ClassCastException等。 7. Java常用类库 Java提供了丰富的...
- .java文件中可以包括多个类,但只有一个类可以被声明为public类,且这个类的名称需要与文件名相匹配。 - Java中没有goto语句。 - &是位运算符,而&&是逻辑运算符,后者在逻辑与操作中具有短路特性。 - 使用...