内部类

类中定义类

分类:

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

成员内部类

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

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

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

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

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

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

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

私有内部类

  • 被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. docker技术剖析--docker资源限制及应用总结 for centos7.2
  2. Excel ,三步 快速实现应用一个公式到一列或一行中
  3. JVM崩溃时:如何调查最严重错误的根本原因
  4. 设计模式学习笔记(十八:模板方法模式)
  5. Lync2010标准版部署
  6. php 数组 闭包,PHP如何用array_filter加闭包函数过滤数组?
  7. display:block jquery.sort()
  8. 客户的价值源于客户的流程
  9. PHP中ajax返回xml数据,PHP 实例 AJAX 与 XML | 菜鸟教程
  10. 小程序“头脑王者” 因违规被微信下架整改 小程序不可逾越的红线
  11. Error:(3, 50) java: 程序包com.n.c.caa.cds.commons.constants不存在
  12. freemarker导出Word文档并在其中插入图片
  13. php图标源码,FaviconICO图标制作在线制作生成PHP开源版源码
  14. 【斯坦福21秋(李沐)】实用机器学习(学习笔记)——1.1课程介绍
  15. 使用 H3C 的办公室路由器和 IDC 的防火墙建立 IPSec ***
  16. 解决微软Edge浏览器和IE浏览器下载无反应的问题
  17. 如何在Android Framework中添加自定义硬件编解码器?
  18. linux脚本跳出循环语句,跳出循环的命令
  19. php 单例模式实现
  20. Python网络爬虫之模拟登陆

热门文章

  1. 【啃书C++Primer5】-c++有些理论基础需要了解,墙裂建议看看原书,有太多细节需要注意了
  2. Blender 插件开发 计算模型长宽高
  3. 六度空间(广度优先搜索)
  4. 五、【服务器】基本概念-1
  5. Elastic Search
  6. java操作Excel、word和pdf
  7. 【Christopher Manning课件】词汇习得Lexical Acquisition
  8. Vue 使用tinymce遇到的一些坑
  9. 公历是农历还是阳历怎么区分
  10. 互联网能改变农业吗?