Java学习:内部类的概念于分类
内部类的概念于分类
如果一个事物的内部类包含另一个事物,那么这就是一个类内部包含另一个类。
例如:身体和心脏的关系,又如:汽车和发动机的关系。
分类
- 成员内部类
- 局部内部类(包含匿名内部类)
成员内部类的定义格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
//。。。
}
//。。。
}
注意:
- 内用外,随意访问;外用内,需要内部类对象。
- 生成的.class文件名字:外部类$内部类.class
如何使用成员内部类?有两种方式
- 间接方式:在外部类的方法当中,使用内部类;然后main只是调用外部类的方法。
- 直接方式:
公式:
类名称 对象名 = 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
定义一个类的时候,权限修饰符规则:
- 外部类:public / (default)只能是这两种
- 成员内部类:public / protected /(default) /private都可以
- 局部内部类:什么都不能写
局部内部类的final问题
局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】。
备注:
- 从Java 8+开始,只有局部变量事实不变,那么final关键字可以省略不写。
原因:
- new出来的对象在推内存当中。
- 局部变量是跟着方法走的,在栈内存当中
- 方法运行结束之后,立刻出栈,局部变量就会立刻消失。
- 但是new出来的对象会在推当中持续存在,直到垃圾回收消失。
匿名内部类
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次。
那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】
匿名内部类的定义格式:
匿名内部类的定义格式:
接口名称 对象名称 = new 接口名称(){
//覆盖重写所有的抽象方法
};//分号不能省略
对格式"new 内部类名称 接口名称() {...}"进行解析
- new代表创建对象的动作
- 接口名称就是匿名内部类需要实现那个接口
- {...}这才是匿名内部类的内容
另外还需要注意几点问题:
1.匿名内部类,在【创建对象】的时候,只能使用唯一一次。
- 如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的实现类了。
2.匿名对象,在【调用方法】的时候,只能调用唯一一次。
- 如果希望同一个对象,调用多次方法,那么必须给对象起一个名字。
3.匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
- 强调:匿名内部类和匿名对象不是一回事!!!
Java学习:内部类的概念于分类的更多相关文章
- Java学习--内部类(一)
Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...
- java IO流的概念与分类
DataInputStream && ObjectInputStream 示例 https://blog.csdn.net/hoho_12/article/details/520543 ...
- Java学习之接口概念
Java语言只支持单重继承,不支持多继承,即一个类只能有一个父类.但是在实际应用中,又经常需要使用多继承来解决问题.为了解决该问题,Java语言提供接口来实现类的多继承问题. 接口(英文interfa ...
- JAVA学习路线图---(JAVA1234) 分类: B1_JAVA 2013-10-05 10:22 502人阅读 评论(1) 收藏
转自:http://blog.csdn.net/pplcheer/article/details/12276999 第一阶段-Java基础 这一阶段很重要,关系到你后面阶段的学习,所以务 ...
- java学习——内部类(一)
内部类 把一个类放在另一个类中定义,这个定义在其他内部的类被称为内部类,包含内部类 的类被成为外部类,Java从JDK1.1开始引入了内部类的定义. 内部类的作用: 内部类提供了更好的封装,可以把内部 ...
- java学习之面向对象概念
思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...
- Java学习——内部类
内部类的访问规则:1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有了 一个外部类的引用,格式 外部类名.this2,外部类要访问内部类,必须建立内 ...
- Java学习之基本概念
1.java体系结构: j2se:是Java的标准版,用于标准的应用开. j2ee:是Java的企业版,用于企业级的应用服务,web服务开发. j2me:是Java的微型版,用户手机或嵌入式开发. p ...
- java学习——内部类(二)
使用内部类 内部类一共有三种使用方法: 1.在外部类中使用内部类 在外部类中使用内部类,与平常使用内部类没有区别,可以直接通过内部类的类名来定义变量,通过new调用内部类的构造方法来创建实例. 唯一的 ...
随机推荐
- JavaScript深入浅出第3课:什么是垃圾回收算法?
摘要: JS是如何回收内存的? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一 ...
- JavaScript正则表达式进阶指南
摘要:正则表达式是程序员的必备技能,想不想多学几招呢? 本文用JavaScript的exec方法来测试正则表达式. 例如,正则表达式**/F.*g/会匹配"以F开头,以g结尾的字符串&quo ...
- 交叉编译tmux
作者:彭东林 邮箱:pengdonglin137@163.com 参考 https://gist.github.com/tessus/5e118d44261a6ab2f198 环境 Qemu-4.1 ...
- 前后端分离-Restful最佳实践
前后端分离-Restful最佳实践 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- node_promise
学习链接 http://liubin.org/promises-book/#__5
- 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结
丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...
- Python学习进阶之薄弱点总结
''' 1.实现用户传入一个普通字符串, 返回字符串的md5加密结果的函数 ''' # import hashlib # # def M(str): # m = hashlib.md5() # m.u ...
- vue大文件上传控件选哪个好?
需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...
- Windbg Call Stack(调用堆栈)窗口的使用
调用堆栈是指向程序计数器当前位置的函数调用链.调用堆栈的顶部函数是当前函数,下一个函数是调用当前函数的函数,依此类推.显示的调用堆栈基于当前程序计数器,除非更改寄存器上下文. 在 WinDbg 中,可 ...
- Quay: Introducing an Application Registry for Kubernetes
转自: https://coreos.com/blog/quay-application-registry-for-kubernetes.html When we started Quay, we w ...