Java基础-内部类介绍
java内部类介绍
内部类一共分为4种
- 成员内部类
- 静态内部类
- 方法内部类
- 匿名内部类
下面我会为大家详细介绍每一个内部类!!
成员内部类
成员内部类就好像是外部类的一个成员属性,也是内部类中最常见的一种,成员内部类也称为普通内部类
定义格式:

需要注意的有一下几点:
1.内部类可以使用外部类的private , public 等修饰符修饰的变量,如果有重名变量默认使用自己的
如果想使用外部类的需要 外部类.this.变量 方式调用重名变量,如果不是重名变量则可以直接是使用
2.外部类无法直接使用内部类变量
测试使用成员内部类方法
同过以上例子可看出外部类是没有办法直接对内部类进行访问的,那该如何访问呢? 看下面
3.外部类访问内部类必须只能通过 外部类对象.new 内部类() 实例出内部类对象,然后就可以使用内部了
4.运行代码以后会出现两个class文件

静态内部类
- 静态内部类与成员内部类的区别在于静态内部类只能直接访问外部类的静态属性,
- 如果想要访问外部类的非静态属性只能通过new 外部类对象().外部类非静态属性;
- 如果外部类静态属性与内部类静态属性一致,在内部类中默认访问自己的静态属性,如果想要访问外部类重名对象只能通过类名.重名静态属性方式
- 创建内部类对象可以直接通过可以直接创建 内部类 对象名= new 内部类()
匿名内部类
匿名内部类是不能有名称的类,所以没有办法引用他们,必须在创建时,作为new语句的一部分来声明他们
但是使用匿名内部类还有个前提条件:必须继承父类或者实现一个接口
这就要采用另一种形式new语句,如下所示:
new<类或接口><类的主题>
这种形式的new语句声明一个新的匿名内部类,他对一个给定的类进行扩展,,或实现一个给定的接口,他还创建那个类的一个新实例,并把它作为语句的结果返回.
要扩展的类和要实现的接接口是new语句的操作数,然后跟匿名内部类的主体
注意匿名内部类的声明是在编译器进行的,实例化是在运行时进行的,这就意味着for云鬟中的一个new语句会创建相同的几个匿名内部类,而不是创建几个不同的匿名内部类的实例
从技术上说 : 匿名内部类视为非静态的内部类,所以他们具备和方法内部声明的非静态类相同的权限和限制
假如要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能所属的类过于简单,或者它的内部只有一个方法),匿名内部类就显的很有用,匿名类尤其适合在swing应用程式中快速常见事件
处理程序,以下是一个匿名内部类的实例:

从上面的例子可以看出,只要一个类是抽象的或者是一个借口,那么其子类中的方法都可以使用匿名内部类来实现
使用匿名内部类需要注意以下几点!
1. 使用匿名内部类时,我们必须继承一个或者实现一个借口,但是两者不可以兼得,同时只能继承或者实现一个
2.匿名内部类中是不能定义构造函数的
3.匿名内部类不能存在任何静态成员变量和静态方法
4.匿名内部类作为局部内部类(及方法内部类),所以局部内部类的所有限制同样对一个匿名内部类生效
5.匿名内部类不能是抽象,它必须要继承的类或者实现的接口所有抽象类
方法内部类
方法内部类简单一点需要注意一下几点?
1.不能使用static修饰符与权限控制符
2.方法内部类只能在方法内部使用
3.如果方法与方法内部类有重名变量,方法内部类只能使用自己的

Java基础-内部类介绍的更多相关文章
- 第30节:Java基础-内部类
内部类 // 外部类 class Demo{ private int num = 3; // 定义内部类 class Int{ void show(){ System.out.println(&quo ...
- Java 基础 内部类
Java 基础 内部类 内部类(嵌套类) nested class 目的为外围类enclosing class提供服务. 四种: 静态成员类 static member class 非静态成员类 no ...
- JAVA基础——内部类详解
JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...
- Java基础知识介绍
数组的定义及初始化方式 数组对象创建没有() 一维数组 静态初始化: String[] books = {"Thinking in Java","Effective Ja ...
- Java基础-内部类-为什么局部和匿名内部类只能访问局部final变量
先看下面这段代码: public class Test { public static void main(String[] args) { } public void test(final int ...
- Java基础-内部类-为什么成员内部类可以无条件访问外部类
在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟.事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面 ...
- Java基础-内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类 ...
- Java基础内部类、包的声名、访问修饰符、代码块整理
内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...
- Java基础—内部类(转载)
转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...
随机推荐
- PHP 单点登录实现方案
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
- Reservoir Sampling-382. Linked List Random Node
Given a singly linked list, return a random node's value from the linked list. Each node must have t ...
- 四,php异常处理
1,异常处理 异常处理用于在指定的异常或错误发生时,改变脚本的正常执行流程. <?php try{ //错误或异常 }catch (Exception $ex){ //处理异常 //抛出异常 } ...
- centos6安装最新syslog-ng推送hdfs
可参考以下网址: installhttps://www.syslog-ng.com/community/b/blog/posts/latest-syslog-ng-available-rhel-6-c ...
- 【css】——根据div个数显示不同的样式
这里记录面试融众集团的一道题 Q:说可能有1~3个item显示在同一行,而item的个数不一定,如果1个,那这个item占宽100%,2个时每一个50%,3个时每一个33%,用纯CSS实现. A:先贴 ...
- react-router-dom 手动控制路由跳转
基于 react-router 4.0 版本,我们想要通过 JS 手动控制路由跳转,分三步: 第一步:引入 propTypes const PropTypes = require('prop-type ...
- 微信小程序一些总结
1.体验版和线上是啥区别,啥关系 在微信开发者工具里提交代码后进入体验版,在微信后台里点击版本管理,就可以看到线上版本,和开发体验版,描述里有提交备注. 在体验版里发布审核之后会进入到线上.他们两个可 ...
- 抓取出现时间3s后消失的元素
背景:日常自动化脚本编写中,可能需要定位,获取元素的位置,通常会遇到一种元素,只出现几秒,几秒后慢慢消失的,这个时候,如果要抓取这个提示,如果和它比手速,当你手速比较快,可以箭头抓取到,但当这个元素的 ...
- POJ 1062
#include<iostream> #include<stdio.h> #define MAXN 105 #define inf 10000000 using namespa ...
- 【PaddlePaddle系列】手写数字识别
最近百度为了推广自家编写对深度学习框架PaddlePaddle不断推出各种比赛.百度声称PaddlePaddle是一个“易学.易用”的开源深度学习框架,然而网上的资料少之又少.虽然百度很用心地提供 ...




