一、什么是内部类?or 内部类的概念

内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。

public class TestA{class TestB {}
}

二、 为什么需要内部类?or 内部类有什么作用?

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

三、 内部类的分类

成员内部类,局部内部类,匿名内部类,静态内部类

3.1 成员内部类

成员内部类:存在于某个类的内部,与全局属性或者方法同级的内部类就是成员内部类。
举一个成员内部类实例:

public class Person{public void run(){}public class DoWork implements Work{}
}

成员内部类特点:

1、(重要)成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括静态成员和私有成员)。!!很重要
2、成员内部类和外部类的属性和方法名同名时,外部类的属性和方法会隐藏;但可以通过外部类.this.成员变量的方式访问外部类的属性和方法。
3、 外部类必须通过成员内部类的对象来访问内部类的属性和方法。
4、 成员内部类对象会隐式的引用一个外部类对象。(可以解释第一点)
5、 成员内部类可以有public\private\protected以及默认访问权限。

3.2 局部内部类

举一个局部内部类实例:

public class Person{public void run(){class DoWork implements Work{}}
}

注意:和成员内部类的区别,局部内部类在方法里面

局部内部类:是定义在一个方法或者一个作用域里面的类。它与成员内部类的区别在于局部内部类的访问仅在于方法内或者作用域内。
局部内部类的特点:

1、 不能有private、public、protected和static等修饰符,与局部变量类似。
2、只能在定义局部内部类的方法或者作用域中实例化;
3、 局部内部类的对象不能使用该内部类所在方法或者作用域的非final局部变量(为什么?);

3.3 匿名内部类
举一个匿名内部类实例:

public class Person{public DoWork doSomething(){return new DoWork(){public void do(){}};}
}

什么是匿名内部类:不定义类的名字,在使用的地方直接定义对象。
匿名内部类的特点:

1、唯一一种没有构造器的类;匿名内部类在编译时,编译器会自动起名xxx$1.class;
2、 匿名内部类不能存在任何静态的变量、方法等;
3、 匿名内部类是局部内部类的特例;
4、大部分匿名内部类用于接口返回;

3.4 静态内部类

举一个静态内部类实例:

public class Person{public void run(){}public static class DoWork implements Work{}
}

注意和成员内部类的区别
静态内部类:在成员内部类的基础上加上一个static关键字就是静态内部类。
静态内部类的特点:

1、不需要依赖外部类。
2、不能使用外部类的非静态属性和方法。

例题:

下列说法正确的是(AB)?

A、对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们
B、 成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)
C、由于匿名内部类只能用在方法内部,所以匿名内部类的用法与局部内部类是一致的
D、静态内部类可以直接访问外部类的非静态成员

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?相关推荐

  1. java中局部内部类_Java内部类详解--成员内部类,局部内部类,匿名内部类,静态内部类...

    一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一 ...

  2. Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)

    内部类是什么? 字面意思,在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class). ...

  3. java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)

    final关键字: final表示最终的不可变的,在java中可以用来修饰类或方法.局部变量.成员变量. // 1.final关键字修饰类需要放在class关键字前面,表示不可变的类,需要注意,这里表 ...

  4. java内部类之成员内部类、局部内部类和匿名内部类

    内部类概念 一个类中包含另外一个类. 分类 成员内部类. 局部内部类(包含匿名内部类). 成员内部类 定义格式: 修饰符 class 类名称 {修饰符 class 类名称 {//...}//... } ...

  5. 三种内部类的使用(成员内部类、局部内部类、匿名内部类)

    三种内部类的使用 内部类是什么? 成员内部类 什么是成员内部类? 如何调用内部类中的public方法? 如何调用内部类中的private方法? 局部内部类 什么是局部内部类? 怎么使用局部内部类? 匿 ...

  6. 内部类详解————局部内部类

    内部类三连击: <内部类详解----匿名内部类> <内部类详解----局部内部类> <内部类详解----静态嵌套类> 定义 在方法或某个作用域内的内部类,称为局部内 ...

  7. 面试 | 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?

    1 内部类的概念 内部类是定义在另一个类中的类:下面类B是类A的内部类.即内部类对象引用了实例化该内部对象的外围类对象. public class A{class B {} } 2 为什么需要内部类? ...

  8. 内部类(成员内部类、局部内部类、匿名内部类、静态内部类)

    外部类:单独定义的一个类,不在其他类的内部,只能用 public 和 缺省 权限修饰符 内部类:在类的内部再定义一个类,根据内部类的定义位置和修饰符的不同,可以分为: 1. 成员内部类: 语法格式: ...

  9. java局部内部类 final_Java的局部内部类以及final类型的参数和变量

    Thinking In Java里面的说法(***正确的说法): 如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final 的.publicclassTest ...

最新文章

  1. USB入门系列之二:USB的连接模型
  2. linux怎么打开云硬盘,Linux系统云服务器如何挂在磁盘
  3. js获取Json对象的长度
  4. 魔方财务对接码支付插件
  5. springboot项目整个的启动流程
  6. Install and Run Docker on NON ROOT
  7. list工具类 ListUtils.java
  8. Python并行编程(七):多进程的基本使用和与多线程的差异
  9. java 端口_java – 如何找到可用的端口?
  10. 在Mac OS X中使用VIM开发STM32(2)
  11. mybatis一简单one2one关系xml配置
  12. rocketmq 两个线程同时消费一个消息
  13. 精品小程序小游戏代码集合(持续更新中)
  14. 微型计算机及接口技术笔记,2010年自考微型计算机及其接口技术笔记串讲
  15. 找茬游戏html5源码,大家来找茬游戏以JS实现
  16. PCL点云去中心化demean
  17. mac chrome更新错误12
  18. 保姆式教学:用Tableau制作盒须图(箱线图)
  19. Linux下service mysqld start 启动MySQL提示Redirecting to /bin/systemctl start mysqld.servic
  20. JAVA语言程序设计教程张席_Java语言程序设计教程

热门文章

  1. “沉浸式大型线下游戏”?看看这次腾讯TGC上如何玩很大!
  2. nalu格式annex-B和avcc
  3. opensuse安装face_recognition全记录
  4. 吴永辉教授2021年讲课1-2
  5. python关于FIFA球员的数据分析
  6. Qt 精美的button合集
  7. 索尼(SONY)笔记本装系统蓝屏问题解决方案
  8. Android从启动到程序运行发生的事情
  9. Tensorflow 2.0 视频分类(四) C3D 3D convolutional Networks
  10. 心蓝android版本,心蓝抢票app-心蓝抢票软件预约 _5577安卓网