Java基础-内部类
文章目录
- 普通内部类
- 1.内部类的基本形式
- 2.实例化一个内部类对象
- 局部内部类
- 匿名内部类
- 静态内部类
- 静态内部类的使用
内部类的四种形式:
- 普通内部类/成员内部类
- 局部内部类
- 匿名内部类
- 静态内部类
内部类是定义在另一个类中的类
。
使用内部类的主要原因有以下三点:
- 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
- 内部类可以对同一个包中的其他类隐藏起来。
- 当需要定义一个回调函数其不想编写大量代码时,使用匿名内部类比较便捷。
普通内部类
1.内部类的基本形式
public class OutClassName{class InnerClassName{...}
}
- 内部类允许用
public
修饰,不违反一个.java
文件中只能有一个public
修饰类的规则。
1.1 被public
修饰的内部类,可以被其他的类所使用。
1.2 被private
修饰的内部类,只能被外部类所用。 - 外部类与内部类在同一个
.java
文件中,编译会生成不同的class文件,内部类文件命名OutClassName$InnerClassName.class
。 - 定义在类的成员位置的内部类,成为成员内部类。
- 内部类可以直接使用外部类的成员,因为内部类拥有外部类对象的引用(
outClass.this
)。 - 普通内部类,不允许使用静态成员变量。
2.实例化一个内部类对象
- 通过外部类的非静态方法来回实例化一个内部类对象。
- 通过外部类对象是去构造内部类对象
outClass.new
。 - 在包外使用内部类,需保证内部类的访问修饰符为
public
。即,内部类遵循同样的访问修饰权限。
public class OutClass {class InnerClass{}public InnerClass getInnerClass(){return new InnerClass();}public static void main(String[] args) {OutClass outClass = new OutClass();// 方法一,通过外部类的非静态方法来实例化InnerClass innerClass1 = outClass.getInnerClass();// 方法二,通过外部类对象的new来时实现InnerClass InnerClass = outClass.new InnerClass();}
}
局部内部类
局部内部类与普通内部类不同点:所处的位置不同
匿名内部类
匿名是一种特殊的局部内部类。
静态内部类
使用statci
修饰的普通内部类(成员内部类)。
- 静态内部类不能访问外部类非静态成员(可以访问静态的)。
- 静态内部类不依赖外部类对象。因此,其无法拥有外部类的静态引用。
- 静态内部类,可以有静态成员。
静态内部类的使用
- 通过
new OutClassName.InnerClassName()
实现。 - 通过外部类的成员方法实现。
Java基础-内部类相关推荐
- Java基础---内部类详解
内部类 概念:定义在类内部的类,可以在类中方法外,也可以在类中方法中根据定义位置的不同,分为成员内部类和局部内部类成员内部类又划分为: 普通的成员内部类 静态的成员内部类 私有的成员内部类另外还有匿名 ...
- 黑马程序员 — JAVA基础 — 内部类、异常
-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.内部类 1.概念: 把类定义在另一个类的内部,该类就被称为内部类. Eg:把 ...
- java基础--内部类学习笔记
一.基本概念 1什么是内部类: 可以把一个类的定义放在另一个类的定义内部,这就是内部类.内部类作为外部类的一个成员,并且依附于外部类存在.一个类中可以存在多个内部类.内部类可以被protected, ...
- JAVA基础——内部类(成员内部类、静态内部类、局部内部类、匿名内部类)
成员内部类 静态内部类 局部内部类 匿名内部类 1.成员内部类(实例内部类.非静态内部类) 成员内部类中不能写静态属性和方法 实例化内部类,首先需要实例化外部类,通过外部类去调用内部类 作用 要想 ...
- Java基础 - 内部类03 - 匿名内部类详解
1.什么是匿名内部类 定义 : 1.匿名内部类是定义在类的局部位置,如方法中.代码块中,且没有明确的类名: 2.是一个内部类,本质还是一个类: 3.没有类名: 4.同时还是一个对象. 2.匿名内部类的 ...
- Java基础--内部类及匿名内部类
测试: 可以简化成一步:
- [Java基础]内部类基础
- java基础(十三)-----详解内部类——Java高级开发必须懂的
java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...
- 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
菜鸟学习笔记:Java面向对象篇下 抽象类 接口 回调函数 内部类 成员内部类 匿名内部类 抽象类 通过前面知识的学习,抽象类这个概念应该不难理解,但比较容易和后面要说的接口混淆,而且在面试中也比较爱 ...
最新文章
- J - One-Dimensional HYSBZ - 4688
- 条形压电陶瓷执行器件和高压驱动器
- monty python喜剧-看美剧学托福:最受美国人喜欢的100部美剧
- Kubernetes 选择 IPVS
- JAVA排序算法之插入排序
- chmod 文件夹及子文件夹_了解linux文件属性之chgrp,chown,chmod
- 1048:有一门课不及格的学生
- Apollo配置中心原理简介
- linux取设备分辨率,linux 获取系统屏幕分辨率
- js兼容性——获取当前浏览器窗口的宽高
- 公众号php空间是啥意思,什么是“希尔伯特空间”?
- vim修改tab默认4个空格
- mysql实验数据库报告_MySQL数据库技术》实验报告模板
- 毕业设计——如何画系统功能结构图?
- 数据恢复工具 winhex使用教程
- java毕设项目开源了,springboot+vue的应用级erp系统
- java 网页版通讯_JavaWeb网页聊天室(WebSocket即时通讯)
- 复杂性思维第二版 一、复杂性科学
- 小牛叔讲Python第1章: 编程界的瑞士军刀Python
- Servlet常见错误 404错误 405错误 500错误等。解决方法
热门文章
- 中科院开源协会镜像站 Android SDK镜像测试发布
- 我的世界java版怎么装在u盘_我的世界选择器参数怎么使用?
- 虚拟机扩容后mysql无法使用_VMWARE 扩容踩坑记
- java arraylist线程安全_ArrayList升级为线程安全的List
- uwsgi指定python路径_uWsgi服务器(2)--安装配置
- python字符串补空格输出_python格式化打印字符串
- abaqus切削为什么没有切屑_SiCp/Al复合材料超声振动辅助切削研究现状与进展
- 二十六、爬取拉钩网Python职位的数据
- 《化工原理》基本知识点
- 十七、去年jQuery的笔记