内部类的概念于分类

如果一个事物的内部类包含另一个事物,那么这就是一个类内部包含另一个类。
例如:身体和心脏的关系,又如:汽车和发动机的关系。

分类

  1. 成员内部类
  2. 局部内部类(包含匿名内部类)
成员内部类的定义格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
//。。。
}
//。。。
}

注意:

  • 内用外,随意访问;外用内,需要内部类对象。
  • 生成的.class文件名字:外部类$内部类.class

如何使用成员内部类?有两种方式

  1. 间接方式:在外部类的方法当中,使用内部类;然后main只是调用外部类的方法。
  2. 直接方式:
公式:
类名称 对象名 = new 类名称();
【外部类名称.内部类名称 对象名 = new 外部类名称().new内部类名称();】

内部类的同名变量访问

如果出现了重名现象,

那么格式是:外部类名称.this.外部类成员变量名
public class Outer{ int num 10;//外部类的成员变量 public class Inner{ int num = 20;//内部类的成员变量 public void methodInner(){
int num = 30;//内部类方法的局部变量
System.out.println(num );//局部变量,就近原则
System.out.println(this.num );//内部类的成员变量
System.out.println(Outer.this.num );//外部类的成员变量
} }
}

局部内部类定义

如果一个类是定义在一个方法内部的,那么这就是一个局部内部类
‘局部’:只有当前所属的方法才能使用它,出了这个方法外面就不能用了。

定义格式:
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部内部类名称{
//。。。
}
}
}

小结一下类的权限修饰符;

public > protected > (default) >private
定义一个类的时候,权限修饰符规则:

  1. 外部类:public / (default)只能是这两种
  2. 成员内部类:public / protected /(default) /private都可以
  3. 局部内部类:什么都不能写

局部内部类的final问题

局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】。

备注

  • 从Java 8+开始,只有局部变量事实不变,那么final关键字可以省略不写。

原因:

  1. new出来的对象在推内存当中。
  2. 局部变量是跟着方法走的,在栈内存当中
  3. 方法运行结束之后,立刻出栈,局部变量就会立刻消失。
  4. 但是new出来的对象会在推当中持续存在,直到垃圾回收消失。

匿名内部类

如果接口的实现类(或者是父类的子类)只需要使用唯一的一次。
那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】

匿名内部类的定义格式:

匿名内部类的定义格式:
接口名称 对象名称 = new 接口名称(){
//覆盖重写所有的抽象方法
};//分号不能省略

对格式"new 内部类名称 接口名称() {...}"进行解析

  1. new代表创建对象的动作
  2. 接口名称就是匿名内部类需要实现那个接口
  3. {...}这才是匿名内部类的内容

另外还需要注意几点问题:
1.匿名内部类,在【创建对象】的时候,只能使用唯一一次。

  • 如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的实现类了。

2.匿名对象,在【调用方法】的时候,只能调用唯一一次。

  • 如果希望同一个对象,调用多次方法,那么必须给对象起一个名字。

3.匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】

  • 强调:匿名内部类和匿名对象不是一回事!!!

Java学习:内部类的概念于分类的更多相关文章

  1. Java学习--内部类(一)

    Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...

  2. java IO流的概念与分类

    DataInputStream && ObjectInputStream 示例 https://blog.csdn.net/hoho_12/article/details/520543 ...

  3. Java学习之接口概念

    Java语言只支持单重继承,不支持多继承,即一个类只能有一个父类.但是在实际应用中,又经常需要使用多继承来解决问题.为了解决该问题,Java语言提供接口来实现类的多继承问题. 接口(英文interfa ...

  4. JAVA学习路线图---(JAVA1234) 分类: B1_JAVA 2013-10-05 10:22 502人阅读 评论(1) 收藏

    转自:http://blog.csdn.net/pplcheer/article/details/12276999 第一阶段-Java基础        这一阶段很重要,关系到你后面阶段的学习,所以务 ...

  5. java学习——内部类(一)

    内部类 把一个类放在另一个类中定义,这个定义在其他内部的类被称为内部类,包含内部类 的类被成为外部类,Java从JDK1.1开始引入了内部类的定义. 内部类的作用: 内部类提供了更好的封装,可以把内部 ...

  6. java学习之面向对象概念

    思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...

  7. Java学习——内部类

    内部类的访问规则:1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有了 一个外部类的引用,格式 外部类名.this2,外部类要访问内部类,必须建立内 ...

  8. Java学习之基本概念

    1.java体系结构: j2se:是Java的标准版,用于标准的应用开. j2ee:是Java的企业版,用于企业级的应用服务,web服务开发. j2me:是Java的微型版,用户手机或嵌入式开发. p ...

  9. java学习——内部类(二)

    使用内部类 内部类一共有三种使用方法: 1.在外部类中使用内部类 在外部类中使用内部类,与平常使用内部类没有区别,可以直接通过内部类的类名来定义变量,通过new调用内部类的构造方法来创建实例. 唯一的 ...

随机推荐

  1. JavaScript深入浅出第3课:什么是垃圾回收算法?

    摘要: JS是如何回收内存的? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一 ...

  2. JavaScript正则表达式进阶指南

    摘要:正则表达式是程序员的必备技能,想不想多学几招呢? 本文用JavaScript的exec方法来测试正则表达式. 例如,正则表达式**/F.*g/会匹配"以F开头,以g结尾的字符串&quo ...

  3. 交叉编译tmux

    作者:彭东林 邮箱:pengdonglin137@163.com 参考 https://gist.github.com/tessus/5e118d44261a6ab2f198 环境 Qemu-4.1 ...

  4. 前后端分离-Restful最佳实践

    前后端分离-Restful最佳实践 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任.

  5. node_promise

    学习链接 http://liubin.org/promises-book/#__5

  6. 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结

    丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...

  7. Python学习进阶之薄弱点总结

    ''' 1.实现用户传入一个普通字符串, 返回字符串的md5加密结果的函数 ''' # import hashlib # # def M(str): # m = hashlib.md5() # m.u ...

  8. vue大文件上传控件选哪个好?

    需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...

  9. Windbg Call Stack(调用堆栈)窗口的使用

    调用堆栈是指向程序计数器当前位置的函数调用链.调用堆栈的顶部函数是当前函数,下一个函数是调用当前函数的函数,依此类推.显示的调用堆栈基于当前程序计数器,除非更改寄存器上下文. 在 WinDbg 中,可 ...

  10. Quay: Introducing an Application Registry for Kubernetes

    转自: https://coreos.com/blog/quay-application-registry-for-kubernetes.html When we started Quay, we w ...