首页 > 其他分享 >面试官:什么是内部类?|这么回答就妥妥的

面试官:什么是内部类?|这么回答就妥妥的

时间:2023-04-28 10:31:52浏览次数:32  
标签:部类 面试官 内部 妥妥 成员 OuterClass 对象 class


关注“Java后端技术全栈”

回复“000”获取大量电子书

本文内容

面试官:什么是内部类?|这么回答就妥妥的_类

什么是内部类?

我们将一个类A定义在另外一个类B中,那么这个类A就叫内部类。

为什么需要内部类呢?

有三点原因:

  1. 内部类方法可以访问该类定义的所在的作用域中的数据,包括私有的数据。
  2. 内部类可以对同一个包中的其他类隐藏起来。
  3. 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较方便。

内部类有什么特性?

内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。

在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。

创建内部类对象的时刻并不依赖于外围类对象的创建。

内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。

内部类提供了更好的封装,除了该外围类,其他类都不能访问。

来自《Think in java》

内部类有哪些种类?

成员内部类:和成员变量一个级别

局部内部类:在方法里的内部类

匿名内部类:基本上属于接口的实现类,一次性使用的场景。

静态内部类:static修饰的成员内部类

如何使用内部类?

创建静态内部类对象的一般形式为:

外部类类名.内部类类名 xxx = new 外部类类名.内部类类名()

创建成员内部类对象的一般形式为:

外部类类名.内部类类名 xxx = 外部类对象名.new 内部类类名()

上面就是做一个简单的回答,如果面试还可能会继续问,那就得继续往下看。

这是一个黄金分割点,以上这部分是初级面试题。

面试回答:

面试官:什么是内部类?|这么回答就妥妥的_编程语言_02

常见高级面试题

为什么成员内部类可以无条件访问外部类的成员?

解题思路:先写个案例,证明是不是正确的,然后再深层次的去了解成员内部类和外部内的关系。

public class OuterClass {
        class InnerClass{
        }
    }

代码中InnerClass就是成员内部类。使用javac对OuterClass进行编译,也可以在IDEA或者eclipse中进行编译,编译完后会发现居然有两个.class文件。

面试官:什么是内部类?|这么回答就妥妥的_编程语言_03

  • 外部类:OuterClass.class
  • 成员内部类:OuterClass$InnerClass.class

使用javap 命令来查看这两个class文件:

OuterClass.class内容为如下:

面试官:什么是内部类?|这么回答就妥妥的_面试_04

就是个简单的类,没什么不一样的地方。我们主要还是看看内部类的这个.class文件内容是否有些特别。

OuterClass$InnerClass.class内容如下:

面试官:什么是内部类?|这么回答就妥妥的_class_05

从上面的内容中我们可以看到四点:

1,定义了一个常量,指向外部类对象的地址。

2,内部类默认有个构造方法,有参数的,参数为外部类。

3,给成员变量1(this$0)赋值为外部类对象地址。

4,有两个成员变量,一个是自己,另外一个是指向外部类对象地址的变量。

所以这里就证明了,为什么内部类能访问外部类的成员(静态内部类是不依赖于外部类的,也就说可以在不创建外部类对象的情况下创建内部类的对象 )。

另外也可以得出一个结论就是:成员内部类依赖于外部类,必须是外部类想创建好对象,内部类才可以创建对象。

总结

在面试的时候可能会遇到以下问题:

  • 什么是内部类?
  • 为什么需要内部类?
  • 内部类有什么特性?
  • 内部类的种类有哪些?
  • 为什么成员内部类可以无条件访问外部类的成员?

希望大家在面试遇到以上问题时,能轻松应对。


标签:部类,面试官,内部,妥妥,成员,OuterClass,对象,class
From: https://blog.51cto.com/u_11702014/6233428

相关文章

  • 面试官:说说你对序列化的理解
    关注“Java后端技术全栈”回复“000”获取大量电子书本文主要内容背景在Java语言中,程序运行的时候,会产生很多对象,而对象信息也只是在程序运行的时候才在内存中保持其状态,一旦程序停止,内存释放,对象也就不存在了。怎么能让对象永久的保存下来呢?--------对象序列化。何为序列化和反序......
  • 政企内部即时通讯软件都有哪些?
    政企内部即时通讯软件是指面向政府机构和企业内部使用的即时通讯工具,相对比个人即时通讯软件更能提高政企内部沟通效率和协作能力,同时保护企业或政府机构内部数据的安全性和隐私性。  目前市场上的政企内部即时通讯软件有很多,比较常见的包括: 钉钉 钉钉是由阿里巴巴官......
  • 面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?
    认识基本数据类型在学习基本数据类型之前,我们先认识一下这两个单词:1、bit--位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。2、byte--字节:字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据,也可以表......
  • 面试官:Java装箱与拆箱的区别?
    关注“Java后端技术全栈”回复“000”获取大量电子书认识装箱和拆箱装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer的valueOf(int)方法。拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int);调用方法:Integer的intValue方法。在JavaSE5之前,如果要......
  • 简化代码————匿名内部类,正则表达式,Lambda
         正则表达式     错误示范     ......
  • RTM团队2023年4月23日需求内部评审会议
    整体过程:会议于4月23日晚上八点开始在宿舍612举行,RTM队总计三人以及邀请的进击的菜鸟队三人全部参会:会议内容:1.我们邀请了除本队之外的队伍来进行评价,讨论,寻找需要改进的问题2.我们分析了任务完成的情况,认为并没有花费太多时间准备验收工作,研发工作有实实在在进行,3.向听众介......
  • 0002_内部类、静态嵌套类
    内部类、静态嵌套类内部类的一个简单例子如下所示:在外部类中定义了一个非静态内部类"InnerClass",并在该类的方法中实例化并调用了该内部类。publicclassOuterClass{privateintouterVar;publicOuterClass(intvar){outerVar=var;}publi......
  • FileSystemWatcher 局域网中大文件的内部传输共享和处理方案
    在不使用其他软件的情况下共享,且自动清理。1、在服务器建了个临时文件夹共享,并且设置只可写入和读取,不可执行(删除)2、写服务源码附上usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Diagnostics;usingS......
  • redis linux下安装 redis启动方式 redis典型场景 redis通用命令 数据结构和内部编码 r
    内容回顾#dockerfile命令 RUNCOPYADDENVEXPOSEWORKDIRCMD:可以用新命令覆盖的ENTRYPOINT:不可以被覆盖#容器要运行,必须有个前台进程#dockerfile部署图书管理系统项目 FROMpython:3.8MAINTAINERlqzWORKDIR/soft......
  • 为什么匿名内部类可以实例化并实现抽象方法?lambda表达式是简化了匿名内部类的实现过程
    为什么匿名内部类可以实例化并实现抽象方法?在Java中,接口是一种特殊的抽象类型,它只定义了一个或多个抽象方法。接口不能被实例化,但是我们可以使用匿名内部类来实现接口并创建一个具体的对象。匿名内部类是一种没有名字的局部内部类,它可以在定义的同时创建一个实例对象。因此,当我......