java基础 内部类详解
什么是内部类?
1.内部类也是一个类;
2.内部类位于其他类声明内部。
内部类的常见类型
1.成员内部类
2.局部内部类
3.匿名内部类
4.静态内部类
简单示例
/**
* 外部类
*
*/
public class OuterClass { private String s = "private String from OuterClass"; private String fs = "final String from OuterClass"; /**
* 成员内部类,字面上理解就是外部类的一部分。类似外部类的属性或方法
* 外部类的属性和方法对于内部类都是可以访问的,包括private属性方法
* 调用方法 外部类名。this。属性或方法
*/
class PartnerClass
{
public void print()
{
System.out.println("this comes from PartnerClass and can get "+OuterClass.this.s);
OuterClass.this.print();
}
} private void print()
{
System.out.println("private method form OuterClass");
/**
* 局部内部类只可以在一定范围内被访问
*/
class Part
{
void print()
{
System.out.println("this comes from part class and can get "+ OuterClass.this.s);
}
} new Part().print();
} interface Anonymous
{
void print();
} /**
* 匿名内部类多为已经定义好的接口或抽象类,在需要使用的地方采取进行具体实现
* 同成员内部类类似
*/
Anonymous anyms = new Anonymous() { @Override
public void print() {
System.out.println("this comes from a anonymous class and can get "+OuterClass.this.fs);
OuterClass.this.print();
}
}; /**
* 静态内部类只能访问外部类的静态属性和方法
* 静态内部类可以通过new OuterClass。StaticClass()的方式创建静态内部类对象
*/
private static class StaticClass implements Anonymous
{ @Override
public void print() {
System.out.println("this comes from static inner class");
} } public static void main(String[] args) { OuterClass outer = new OuterClass();
/**
* 外部类可以创建获取内部类对象
* 创建方法为 new 外部类().new 内部类()
*/
outer.new PartnerClass().print(); outer.anyms.print(); StaticClass sc = new OuterClass.StaticClass();
sc.print();
} }
内部类有什么用处?
1.隐藏类名和具体实现细节
2.内部类可以访问外部类的属性和方法
3.内部类可以用来实现闭包和回调
4.内部类可以用来实现多重继承
5.封装数据进行传值
个人内部类使用经验不多,以后有用到会补充进来
java基础 内部类详解的更多相关文章
- JAVA基础——内部类详解
JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...
- Java修炼——内部类详解
内部类详解 定义:将一个类定义在另一个类的内部,该类就称为内部类 类中定义的内部类特点: 内部类作为外部类的成员,可以直接访问外部类的成员 (包括 private 成员),反之则不行. 内部类做为外部 ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能 ...
- Java基础数据类型详解
在Java中的数据类型一共有8种,大致分为整型(4个)浮点型(2个)布尔(1)字符(1个) 分类 类型 默认值 占用字节 范围 整型 byte 0 1 = 8 bit -2^7 - 2^7 short ...
- JAVA基础——异常详解
JAVA异常与异常处理详解 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在java中,阻止当前方法或作用域的情况,称之为异常. java中异常的体系是怎么样的呢? 1 ...
- java基础:数组详解以及应用,评委打分案例实现,数组和随机数综合,附练习案列
1.数组 1.1 数组介绍 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致. 1.2 数组的定义格式 1.2.1 第一种格式 数据类型[] 数组名 示例: int[] arr; ...
- Java基础 - 异常详解
异常的层次结构 Throwable Throwable 是 Java 语言中所有错误与异常的超类. Throwable 包含两个子类:Error(错误)和 Exception(异常),它们通常用于指示 ...
- 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)
在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...
- Java基础——枚举详解
前言: 在第一次学习面向对象编程时,我记得最深的一句话就是“万物皆对象”.于是我一直秉承着这个思想努力的学习着JAVA,直到学习到枚举(Enum)时,看着它颇为奇怪的语法……我一直在想,这TM是个什么 ...
随机推荐
- [Python基础]002.语法(1)
语法(1) 变量 基本数据类型 空值 布尔值 数字 字符串 列表 元组 字典 结构嵌套 变量 定义变量 i = 10 这样就定义了一个名为 i 的变量,它的值是 10 . 变量名必须是大小写英文.数字 ...
- SSIS 数据类型 第二篇:变量的数据类型
变量(Variable)用于存储在Package运行时用到的值,集成服务支持两种类型的变量:用户自定义的变量和系统变量,自定义的变量由用户来定义,系统变量由集成服务来定义. 变量的用途十分广泛,用于容 ...
- Could not find the Qt platform plugin windows错误解决方法
在PyCharm中运行PyQt5窗口程序时,出现了下图所有的错误提示. 出现该问题的原因是环境变量没有添加. 解决方法:在环境变量中增加:QT_QPA_PLATFORM_PLUGIN_PATH 路径: ...
- Codeforces Round #646 (Div. 2)【B. Subsequence Hate题解】
具体思路已经在代码注释中给出,这里不再赘述. #include<iostream> #include<algorithm> using namespace std; int t ...
- Rocket - util - Frequency
https://mp.weixin.qq.com/s/QoP9Gbm9hUQ4xsjJQ0pZ1Q 简单介绍Frequency的实现. 一个实例: 1. 基本介绍 ...
- 【Hadoop】mapreduce环形缓冲区
mapreduce过程解析 数据在map中怎么写入磁盘? 数据:经过map逻辑处理过后的数据(key,value)- 磁盘:本地磁盘 环形缓冲区 1.为什么要环形缓冲区? 答:使用环形缓冲区,便于写入 ...
- eclipse中的Invalid text string (xxx).
这个是说明在eclipse中引用HTML的时候,语法出现了不规范的错误 可以到https://www.w3school.com.cn/index.html里面找找对应对象的问题 我之前就是option ...
- css引入方式和基本样式
css的三种引入方式: 1.内嵌:直接在标签中添加style属性 格式:<标签名 style="样式1:样式值1:样式2=样式值2:"></标签名> 2.内 ...
- Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...
- Java实现 LeetCode 466 统计重复个数
466. 统计重复个数 定义由 n 个连接的字符串 s 组成字符串 S,即 S = [s,n].例如,["abc", 3]="abcabcabc". 另一方面, ...