内部类,从名字上就可以看出,是定义在外部类里的类,可以更加详细地说明某个事物的特征,举个例子,就像一个人(把他定义为一个类[外部类]),这个人有大脑、肝脏、心脏等器官,这些器官都有自己特有的属性,但又必须待在身体里面,而不能单独列出来(单创一个类),这时就要创建内部类了。内部类按是否有名称可分为:有名内部类匿名内部类

class Body{  //外部类double bloodFlow = 13.5;//外部类成员变量class Heart{ //有名内部类double heartRate = 70;void beat(){System.out.println("每分钟跳动70次");}}public static void main(String[] args) {Body body = new Body();Heart heart = body.new Heart();   //调用内部类
//      Body.Heart heart = new Body().new Heart(); 也可以这样调用(因为该内部类是非静态的,不能直接调用,需要通过创建对象来调用)System.out.println(heart.heartRate); //输出结果:70heart.beat();                   //输出结果:每分钟跳动70次}
}

该程序编译后会生成两个文件:Body.class 和 Body$Heart.class
其实上面的内部类也是非静态内部类,所以也就有静态内部类

class Body{  //外部类static class Brain{ //静态内部类void happen(){System.out.println("大脑每秒发生10万次化学反应");}}public static void main(String[] args) {//      Body body = new Body();(在一个外部类中调用时不需要这行代码)Brain brain = new Brain();  //调用静态内部类
//      Body.Brain brain = new Body.new Brain(); 也可以这样调用(因为该内部类是静态的,所以可以直接调用)brain.happen();  //输出结果:大脑每秒发生10万次化学反应}
}

匿名内部类,顾名思义就是没有名字的内部类,想一下一个没有名字的类该怎么调用它?怎么创建对象?肯定都不能实现了,所以匿名内部类一定要和创建对象一起存在,此时的匿名内部类也就是上转型对象(所以无法调用匿名内部类中新增的属性和方法),且跟在new后面的若是“类”,则该匿名内部类是其子类,若跟在new后面的是“接口”,则该匿名内部类是其实现类。
我们再想一下在多态中,子类要重写父类的方法,但首要前提就是创建一个子类,然后重写,再调用。这样会很麻烦,而且如果就几个或一个抽象方法时,再单独创建一个子类很浪费,所以此种情况下就可以考虑用匿名内部类了(也就是说匿名内部类通常用作实现或重写接口或父类中的抽象方法)

public interface IBlood{void cycle();
}
class Body{static IBlood blood = new IBlood(){ //从这个大括号到对应的大括号之间就是匿名内部类,它可以直接作为一个整体去使用@Overridepublic void cycle(){System.out.println("血液循环");}}; //注意:要加英文分号public static void main(String[] args) {blood.cycle(); //输出结果:血液循环}
}

该程序编译时创建三个文件:IBlood.class文件、Body.class文件、Body$1.class文件。
(内部类是一个独立的class文件)
总之匿名内部类要和创建对象一起使用,多用于继承其他类或实现接口,对继承方法进行重写或实现,因为不用另创建一个单独的子类,所以就简化了代码

最后补充一点内部类的访问权限,外部类或接口的访问权限只能是public或默认的,而内部类四种访问权限都可以,但局部内部类跟局部变量一样 不允许添加任何访问权限:

class Out{//只能是public或默认的protected Class In{//四种都可以}public static void main(String[] args) {Class PartIn{//不可添加任何访问权限int age = 12;//jdk8.0及以后,在内部类中定义局部变量不需要加final/*final int age = 12  jdk8.0以前需要加final*/}}
}

有名内部类 匿名内部类相关推荐

  1. Java学习笔记:内部类/匿名内部类的全面介绍

    编写java程序时,一般一个类(或者接口)都是放在一个独立的java文件中,并且类名同文件名(如果类是public的,类名必须与文件名一致:非public得,无强制要求).如果想把多个java类放在一 ...

  2. 【java笔记】成员内部类 局部内部类 匿名内部类

    内部类:一个类的内部包含另一个类 如:身体和心脏的关系,汽车和发动机的关系 分类:(1)成员内部类 (2)局部内部类(包含匿名内部类) 成员内部类: 定义格式:修饰符 class 外部类名称{ 修饰符 ...

  3. JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?

    本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要用final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量. 因此,内部类能够访问某局部 ...

  4. JAVA内部类匿名内部类总结

    个人简介 大家好,我是翰慧腾.一名正在努力学JAVA的大一小白,本文章为初学的笔记,希望各位多多指教.

  5. Java内部类(匿名内部类)

    Java内部类(匿名内部类) 一.内部类 二.静态内部类 三.成员内部类 四.局部内部类(了解即可) 五.匿名内部类(重要) 一.内部类 1.概述 内部类就是一个定义在一个类里面的类,里面的类可以理解 ...

  6. JAVA基础——内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    成员内部类 静态内部类 局部内部类 匿名内部类 1.成员内部类(实例内部类.非静态内部类) 成员内部类中不能写静态属性和方法 实例化内部类,首先需要实例化外部类,通过外部类去调用内部类   作用 要想 ...

  7. 【java】兴唐第十九节课(内部类)

    内部类:在类的内部定义的类叫内部类 1.有名内部类: (1)实例化时必须先实例化外部对象,格式: 外部类.内部类 对象名 = 外部类对象名.new.内部类名(): 代码实现: //student类 p ...

  8. Java 内部类

    概述: ​ 定义在类的内部的类就叫做内部类 作用: 1.可以对资源进一步的封装,提升代码的安全性 2.间接的实现多继承 分类: 根据位置不同: 成员内部类         普通成员内部类        ...

  9. Java:四大内部类详解及总结

    文章目录 声明 成员内部类 局部内部类 匿名内部类 静态内部类 内部类总结 普通内部类 局部内部类 匿名内部类 静态嵌套类 声明 1)该文章部分内容整理自网上的资料,如不小心侵犯了大家的权益,还望海涵 ...

最新文章

  1. RichTextBox粘贴两次以及去掉粘贴内容的格式问题
  2. Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型...
  3. 2007基于循环链表的队列的基本操作(C++)
  4. 程维谈智慧交通:我们赶上好时代 走出了自己路
  5. 苹果失策?新iPhone捆绑Apple TV+或会致硬件利润率下滑
  6. linux下如何升级gcc和g++编译器
  7. 问题 G: 三个数比较大小
  8. 流行的Spring Boot + Vue架构整合开发的网易云+QQ音乐(附源码)!
  9. 【LDAP】LDAP常用命令解析
  10. python 修改用户对文件权限_用户管理相关内容的学习(查看文件权限 修改文件权限chmod 改变文件归属chown和chgrp)...
  11. 日语学习的实用网址大全!
  12. 从普通回溯到三色标记法法
  13. IEC60958和IEC61937
  14. CF1527D MEX Tree(mex树容斥)
  15. windows开机自动运行bat文件
  16. C语言程序设计教材九斗验证,C语言程序设计
  17. Vim中如何替换字符串
  18. 基于Java实现的区块链供应链金融系统平台设计
  19. 基于SVM的智能家居模拟系统
  20. 【服务器数据恢复】NetApp存储无法访问的数据恢复案例

热门文章

  1. Data - 数据思维 - 下篇
  2. buffer IO和direct IO
  3. 使用nmonchart把.nmon文件转换成html
  4. adb logcat命令查看并过滤android输出log
  5. C# async await 学习笔记2
  6. asp.net中web.config配置节点大全详解
  7. avplayer VS2008编译
  8. MATLAB【六】 ———— matlab 随机散斑模拟
  9. Linux 系统挂载数据盘
  10. 何崚谈阿里巴巴前端性能优化最佳实践