内部类

类里面:成员内部类 ,静态内部类(区别就是是否有static)

方法里面:匿名内部类,局部内部类(匿名内部类没有类名,局部内部类有)

  • ok 学到这里,类的五大组成部分就出来了:属性,构造器,方法,代码块,内部类
class Outer{                 //外部类public class Inner{     //内部类 (这里是成员内部类)int age = 1;     }public void test(){Inner inner = new Inner();System.out.println(inner.age);}public static void main(String[] args){Outer outer = new Outer;   //外部类对象创建Outer.Inner inner = outer.new Inner()  //内部类对象的创建}
}

1.局部内部类

  • 可以直接访问外部类的所有成员,包含私有的
  • 不能添加访问修饰符,因为他的地位就是一个局部变量,但是可以用final修饰
  • 作用域,仅仅在定义他的方法或者代码块里面
  • 局部内部类访问外部类的成员–>直接访问
  • 外部类访问局部内部类,在局部内部类的作用域内创建对象然后访问
  • 局部内部类里的属性和外部类属性重名,怎么搞?solution:外部类名.this.属性名,你可能会有疑问,为什么不能直接this.属性名,因为局部内部类他始终是一个局部变量,创建它的对象只能在方法体内或者代码块内,调用的时候也是外部类的对象调用这个方法进而使用这个对象,所以用this.属性名的this指的是方法体中创建的局部内部类对象,但是你加上一个外部类名的话,就能表示这个this是外部类的对象

2.匿名内部类

2.1基于接口的匿名内部类

引入:一般情况下你要实现一个接口是写一个类实现接口,然后创建类的对象实例来使用。但是我现在的需求是只想使用一次,后面不再使用这个类,那我们就引入了匿名内部类

public class AnonymousInnerClass {public static void main(String[] args) {IA ia = new IA(){@Overridepublic void wang() {System.out.println("汪汪叫....");  }};}
}interface IA{void wang();
}

需要注意的几个点:

  1. IA ia = new IA(){}
    

    编译类型:IA

    运行类型:匿名内部类,在这里JVM底层实际上是创建了一个类来实现接口,类的名称为外部类名加一个$1,他就是匿名内部类,然后创建一个类的实例,最后把地址返回给ia

  2. 匿名内部类使用了一次就不能再使用,但是ia指向的这个对象是可以一直使用的

2.2 基于类的匿名内部类

  • 和接口差不多,底层也是创建了一个匿名内部类来继承一个类,然后创建一个对象返回地址,匿名内部类的名称也是外部类名加上一个$1
  • 如果你在创建的时候在形参列表里放了东西,那么它是用在匿名内部类的父类的构造方法里面

3.成员内部类

成员内部类,对比概念成员变量,成员方法,它可以用四种权限修饰符修饰

几个注意的点:

  • 外部其他类,使用成员内部类的两种方法

       外部类名.内部类名 inner = 外部类实例.new 内部类名();外部类名.内部类名 inner = 外部类实例.返回内部类实例的方法
    
  • 如果成员内部类的成员和外部类的成员重名,会遵守就近原则,可以通过 外部类名.this.属性 在内部类里面来访问外部类的成员

4.静态内部类

  1. 放在外部类的成员位置
  2. 用static修饰,可以直接访问外部类的所有静态成员
  3. 同样的,可以用四种权限修饰符

tips: 外部其他类使用静态内部类

 外部类名.内部类名 inner = new 外部类名.内部类名();外部类名.内部类名 inner = 外部类实例.返回内部类实例的方法  或者 外部类名.静态方法

四种内部类详解【内含详细例子】【保姆级教程】相关推荐

  1. 内部类(四种内部类详解)

    == = = = = = = 内部类(四种内部类详解)= = = = = = = == 一.基本介绍:一个类的内部又完整的嵌套了另一个类结构.被嵌套的类称为内部类(inner class),嵌套其他类 ...

  2. 类与接口(二)java的四种内部类详解

    引言 内部类,嵌套在另一个类的里面,所以也称为 嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...

  3. 一文详解非线性优化算法:保姆级教程-基础理论

    不论是刚入门SLAM的小白,还是导航相关专业的同学,都对"非线性优化"这个词不陌生,如果你说你没听过这个词,那"因子图"一词总该略有耳闻吧,如果还是不知道,那就 ...

  4. php 去重_php求两数组交集的四种方法详解

    题目:给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1],nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5 ...

  5. python输入字符串并反序result_python字符串反转的四种方法详解

    python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...

  6. RTSP、HTTP、HTTPS、SDP四种协议详解

    RTSP.HTTP.HTTPS.SDP四种协议详解 从这篇开始我们将进入流媒体的环节,流媒体在android中有nuplayer来实现的,在开始讲解android流媒体前,我们先来讲讲流媒体传输协议, ...

  7. kinux查日志_Linux实时查看日志的四种命令详解

    原标题:Linux实时查看日志的四种命令详解 如何在Linux中实时查看日志文件的内容?那么有很多实用程序可以帮助用户在文件更改或不断更新时输出文件的内容.在Linux中实时显示文件内容的常用命令是t ...

  8. js和php能生成一样的随机数_JavaScript_JS生成某个范围的随机数【四种情况详解】,前言: JS没有现成的函数,能 - phpStudy...

    JS生成某个范围的随机数[四种情况详解] 前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random()  这个函数可以生成 [0,1) 的一个随机数. 利用它 ...

  9. java正则表达式判断问号_正则表达式问号的四种用法详解

    原文符号 因为?在正则表达式中有特殊的含义,所以如果想匹配?本身,则需要转义,\? 有无量词 问号可以表示重复前面内容的0次或一次,也就是要么不出现,要么出现一次. 非贪婪匹配 贪婪匹配 在满足匹配时 ...

最新文章

  1. javascript数组降维_Javascript实现的数组降维——维度不同,怎么谈恋爱
  2. TensorFlow 制作自己的TFRecord数据集
  3. unity3d EasyTouch滑动屏幕移动相机观看场景
  4. Web开发常规调试方法与常见问题分析
  5. Facebook开源内存数据库Beringei,追求极致压缩率
  6. 新手学电脑入门教程_炒股技巧大全丨炒股新手怎样才能长期稳定盈利
  7. 揭穿骗子阴谋,学会保护自己
  8. c语言中的static变量和static函数
  9. 致远今目标移动APP无法脱离PC单独使用
  10. TensorFlow Serving + Docker + Tornado机器学习模型生产级快速部署
  11. type=file文件上传H5新特性
  12. python股票接口_Python 从 sina 股票数据接口读取数据,并保存到 MySQL 数据库
  13. R语言快速学习第一部分(有其他语言基础)
  14. c4d导出obj格式有破面_适合折腾MMD的C4D常用插件及本体合集
  15. zoj 3629 Treasure Hunt IV
  16. HTML:canvas简述
  17. 微软制作win7启动U盘的工具
  18. 一、zabbix与nagios对比
  19. 安卓Java开启usb热点_安卓手机通过USB共享PC的宽带网络上网
  20. js去掉字符串第一位和最后一位

热门文章

  1. win10禁止dpi缩放在哪_如何在Win10中调整dpi缩放? Win10全局启用dpi缩放设置方法!...
  2. Python 爬虫 :搜狗百科,爬取多个人名的属性表信息 pycharm selenium
  3. XCode教程之 如何在苹果开发者平台添加设备UDID
  4. c语言经典算法——猴子偷桃问题
  5. 【coling 2020】Attentively Embracing Noise for Robust Latent Representation in BERT
  6. Android源码编译之Nexus5真机编译
  7. Unity Text字间距和行间距调整
  8. 职场新人酒场生存法则
  9. VIO残差函数的构建以及IMU预积分和协方差传递
  10. @Transactional-隔离级别-二级缓存的扯谈