内部类

类中定义类

分类:

  • 成员内部类
  • 私有内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

成员内部类

  • 定义在外部类的成员位置的类

  • 具有类的特点,可以继承其他父类,实现其他接口

  • 具有成员的特点,可以被修饰符所修饰

只有静态内部类可以直接定义静态的内容,其他内部类只能定义静态的常量

在成员内部类中可以直接使用外部类的成员,包括私有的

在外部类的成员方法中需要通过成员内部类的对象,调用其成员,包括私有的

在其他类汇总,需要通过外部类对象创建内部类对象,通过内部类对象调用其成员

私有内部类

  • 被private修饰的成员内部类
  • 在私有内部类中可以直接使用所在外部类的成员,包括私有的
  • 所在外部类中可以通过私有内部类的对象调用其方法成员
  • 在其他类中无法使用

静态内部类

  • 被static修饰的成员内部类
  • 可以定义静态内容,可以定义非静态内容
  • 静态内部类中可以直接使用外部类的静态内容,需要依赖外部类对象访问其成员,包括私有的
  • 在所在外部类中可以通过静态内部类的对象访问其成员,通过静态内部类的类名访问其静态内容,包括私有的
  • 在其他类中可以通过外部类类名.静态内部类类名.静态内容访问静态内部类的静态内容
  • 在其他类中可以通过new 外部类类名.静态内容();对象访问其成员内容

局部内部类

  • 内部类定义在外部类的局部位置
  • 局部内部类不能通过访问权限修饰符、static等修饰,但是final可以修饰
  • 局部内部类中不能定义静态内容,除了静态的常量
  • 在局部内部类中可以使用外部类的成员,看局部内部类所在的方法时静态还是非静态
  • 在局部内部类中可以使用所在方法的局部变量,但是如果一旦在局部内部类中使用这个局部变量,这个局部变量在jdk1.8及之后默认被final修饰,在jdk1.7及之前需要显示手动被final修饰
  • 只能在所在方法中通过局部内部类的对象访问其成员,外部类的其他方法中或者其他类中都无法访问
public class Class005_Outer {private int i = 1;private static int j = 2;//外部类成员方法public void outer(int haha){//局部int a = 1; //局部变量//局部内部类class Inner extends Object{int m = 1;static final int N = 10;public void inner(){System.out.println("局部内部类中的成员方法");System.out.println(i);System.out.println(j);System.out.println(a);}}//所在方法中测试使用局部内部类Inner in = new Inner();in.inner();}public static void main(String[] args) {}
}

匿名内部类

  1. 没有自己类本身作用,就是用来重写方法
  2. 只在当前使用一次,不会在不同类中重复使用
  3. 将定义实现类 | 子类重写方法+创建实现类 | 子类对象 - >合二为一

语法:

​ new 接口 | 抽象父类(){//实现类 | 子类的类体

​ 重写方法…

​ };

public class Class006_Outer {public static void main(String[] args) {//创建实现类对象Demo demo = new Demo();//通过对象调用重写方法demo.swimming();//匿名内部类对象//1)匿名对象 :  只能在当前行使用一次new Swim(){//匿名内部类类体@Overridepublic void swimming() {System.out.println("花样游泳...");}}.swimming();//2)接口多态 : 可以后续通过引用多次使用当前实现类对象Swim s = new Swim(){@Overridepublic void swimming() {System.out.println("蛙泳...");}};s.swimming();s.swimming();//3)匿名内部类对象作为方法的实参test(new Swim() {@Overridepublic void swimming() {System.out.println("狗刨...");}});}//统计所有会游泳的人public static void test(Swim swim){swim.swimming();}
}interface Swim{void swimming();
}//实现类
class Demo implements Swim{@Overridepublic void swimming() {System.out.println("仰泳....");}
}

内部类都有哪些?什么是内部类相关推荐

  1. java中有几种内部类,Java中的四种内部类

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

  2. java内部类为什么使用很少_java内部类有什么好处?为什么需要内部类?

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

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

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

  4. java 内部类定于_搞懂 JAVA 内部类

    前些天写了一篇关于 2018 年奋斗计划的文章,其实做 Android 开发也有一段时间了,文章中所写的内容,也都是在日常开发中遇到各种问题后总结下来需要巩固的基础或者进阶知识.那么本文就从内部类开刀 ...

  5. java内部类为什么使用很少_Java内部类你真的会吗?

    一.四种内部类 1.1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式: 1 public classOuterAndInnerClass {2 public s ...

  6. java 什么是内部类_讨论Java中的内部类是什么?

    前言 内部类,讲完前面的特性,今天就讲下内部类这个用的比较多,出现频率挺高的知识点. what is that? 首先,顾名思义,内部类就是在类的内部,也就是类的类,嵌套在里面的.直接代码介绍,现一般 ...

  7. java 内部类怎么调用成员变量_JAVA内部类之成员内部类

    JAVA有一个特殊的类形式--内部类(这个词有点为难普通话不好的南方朋友).今天我们就来聊聊内部类的一种:成员内部类. 如何定义成员内部类 那要如何定义成员内部类呢. 既然叫成员内部类,说明和成员变量 ...

  8. java内部类赋值_详解 Java 内部类

    内部类在 Java 里面算是非常常见的一个功能了,在日常开发中我们肯定多多少少都用过,这里总结一下关于 Java 中内部类的相关知识点和一些使用内部类时需要注意的点. 从种类上说,内部类可以分为四类: ...

  9. java内部类人打电话依赖手机_Java内部类及反射类面试问题,90%的人都不知道

    1.静态嵌套类 (Static Nested Class) 和内部类(Inner Class)的不同? 静态嵌套类:Static Nested Class是被声明为静态(static)的内部类,它可以 ...

最新文章

  1. copy elison RVO NRVO
  2. leetcode刷题实录:3
  3. WP7 WMAppManifest.xml各个属性作用
  4. MaskRCNN要点
  5. 用python怎样用程序输出文字_如何用Python输出PPT中的文字信息
  6. 如何在“活动监视器”中检查Mac是否需要更多内存?
  7. 20200709每日一句
  8. edittext 点击区域外隐藏输入法
  9. AT指令集超详细解析(内含EC20模块datasheet)
  10. html5 网易公开课,麻省理工学院公开课:单变量微积分习题课
  11. 语音合成(TTS)论文优选:Learning to Speak Fluently in a Foreign Language: Multilingual Speech Synthesis and Cr
  12. Unity3D常用的生命周期函数
  13. 科学上网后(关掉VPN)之后无法正常连接网络
  14. [附源码]计算机毕业设计Python+uniapp作业批改系统APP4238p(程序+lw+APP+远程部署)
  15. 计算机基础练习题(包含答案)
  16. 计算机编程语言是什么?
  17. 智行者王肖:自动驾驶本质在于对待数据的态度、获取及应用方式 | 自动驾驶这十年...
  18. 【自学Java】Java语言特点
  19. sap 寄售业务流程
  20. 《第1阶段》——正交试验法

热门文章

  1. 难,难,难,如何把握分寸感?
  2. 验证字符串首尾不允许输入空格,中间只能输入一个空格
  3. Angular-------持续学习(angular8.0)
  4. 使用邮箱地址标识用户
  5. 查找最接近的元素(c语言)
  6. rank() 和dense_rank() 区别
  7. 大话USB(一)2022-02-09
  8. COGS732. [网络流24题] 试题库
  9. 成都盛铭轩:店铺数据分析方法
  10. 月薪2W-3W!腾讯/阿里/网易等大厂都缺的人才...