面试 | 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?
1 内部类的概念
内部类是定义在另一个类中的类;下面类B是类A的内部类。即内部类对象引用了实例化该内部对象的外围类对象。
public class A{class B {}
}
2 为什么需要内部类?(来自JAVA核心技术)
- 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
- 内部类可以对同一个包中的其他类隐藏起来。
- 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
3 内部类的分类
3.1 成员内部类
成员内部类:存在于某个类的内部,与全局属性或者方法同级的内部类就是成员内部类。
成员内部类特点:
- 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括静态成员和私有成员)。
- 成员内部类和外部类的属性和方法名同名时,外部类的属性和方法会隐藏;但可以通过外部类.this.成员变量的方式访问外部类的属性和方法。
- 外部类必须通过成员内部类的对象来访问内部类的属性和方法。
- 成员内部类对象会隐式的引用一个外部类对象。(可以解释第一点)
- 成员内部类可以有public\private\protected以及默认访问权限。
成员内部类实例:
public class Person{public void eat(){}public class DoWork implements Work{}
}
3.2 局部内部类
局部内部类:是定义在一个方法或者一个作用域里面的类。它与成员内部类的区别在于局部内部类的访问仅在于方法内或者作用域内。
局部内部类的特点:
- 不能有private、public、protected和static等修饰符,与局部变量类似。
- 只能在定义局部内部类的方法或者作用域中实例化;
- 局部内部类的对象不能使用该内部类所在方法或者作用域的非final局部变量(为什么?);
局部内部类实例:
public class Person{public void eat(){public class DoWork implements Work{}}
}
3.3 匿名内部类
匿名内部类:不定义类的名字,在使用的地方直接定义对象。
匿名内部类的特点:
- 唯一一种没有构造器的类;匿名内部类在编译时,编译器会自动起名xxx$1.class;
- 匿名内部类不能存在任何静态的变量、方法等;
- 匿名内部类是局部内部类的特例;
- 大部分匿名内部类用于接口返回;
匿名内部类实例:
public class Person{public DoWork doSomething(){return new DoWork(){public void do(){}};}
}
3.4 静态内部类
静态内部类:在成员内部类的基础上加上一个static关键字就是静态内部类。
静态内部类的特点:
- 不需要依赖外部类。
- 不能使用外部类的非静态属性和方法。
静态内部类实例:
public class Person{public void eat(){}public static class DoWork implements Work{}
}
面试 | 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?相关推荐
- java中局部内部类_Java内部类详解--成员内部类,局部内部类,匿名内部类,静态内部类...
一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一 ...
- 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?
一.什么是内部类?or 内部类的概念 内部类是定义在另一个类中的类:下面类TestB是类TestA的内部类.即内部类对象引用了实例化该内部对象的外围类对象. public class TestA{cl ...
- Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)
内部类是什么? 字面意思,在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class). ...
- java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)
final关键字: final表示最终的不可变的,在java中可以用来修饰类或方法.局部变量.成员变量. // 1.final关键字修饰类需要放在class关键字前面,表示不可变的类,需要注意,这里表 ...
- java内部类之成员内部类、局部内部类和匿名内部类
内部类概念 一个类中包含另外一个类. 分类 成员内部类. 局部内部类(包含匿名内部类). 成员内部类 定义格式: 修饰符 class 类名称 {修饰符 class 类名称 {//...}//... } ...
- 三种内部类的使用(成员内部类、局部内部类、匿名内部类)
三种内部类的使用 内部类是什么? 成员内部类 什么是成员内部类? 如何调用内部类中的public方法? 如何调用内部类中的private方法? 局部内部类 什么是局部内部类? 怎么使用局部内部类? 匿 ...
- 内部类详解————局部内部类
内部类三连击: <内部类详解----匿名内部类> <内部类详解----局部内部类> <内部类详解----静态嵌套类> 定义 在方法或某个作用域内的内部类,称为局部内 ...
- 内部类(成员内部类、局部内部类、匿名内部类、静态内部类)
外部类:单独定义的一个类,不在其他类的内部,只能用 public 和 缺省 权限修饰符 内部类:在类的内部再定义一个类,根据内部类的定义位置和修饰符的不同,可以分为: 1. 成员内部类: 语法格式: ...
- java局部内部类 final_Java的局部内部类以及final类型的参数和变量
Thinking In Java里面的说法(***正确的说法): 如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final 的.publicclassTest ...
最新文章
- java调用项目中的文件_详解eclipse项目中.classpath文件的使用
- JVM性能优化, Part 2 ―― 编译器
- mysql 包含非数字_mysql 正则表达式查询含有非数字和字符的记录
- 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
- 作者:赵衎衎,男,中国人民大学信息学院博士生,CCF学生会员。
- 10 个非常酷的基于jQuery的菜单效果插件
- python压缩和读取.tar.bz2格式的压缩包
- hdu 3065 病毒侵袭持续中
- 音视频SDP协议介绍(rtsp,sip)
- DLL注入与DLL劫持注入
- 谷歌中国发布三国赤壁地图
- 十八岁白帽子与“攻陷五角大楼”众测计划
- clover懒人_懒人气球驱动的互联网毕竟可能不是一个愚蠢的想法
- switch相关系列
- 键盘按键响应时间越快越好吗_【涨姿势】按键无冲、响应延时、键盘调速……你会看机械键盘参数指标吗?...
- K2 重磅出击,构建财务共享中心方案,促进企业标准化
- OpenStack Days China:华云数据CTO郑军分享OpenStack创新实践
- hive表中的数据导出
- 关于昔归,您知道多少
- V831——人脸识别开锁
热门文章
- GraphQL 浅谈,从理解 Graph 开始
- des加密解密 代码 java_java 实现DES 加密解密的示例
- 为硬件保留的存储空间怎么释放出来?
- latex输入单双引号
- Git 报错:The ECDSA host key for gitlab.xx.net has changed, and the key for the corresponding.......
- 【OpenCV】cv2.putText()函数用法
- 全国电信/联通DNS服务器地址列表
- 关于各种职业的英文单词zz
- onSubmit与onClick的区别
- openCV人脸识别简单案例