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中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...
随机推荐
- ifnull是个好东西
在进行数据与服务器的数据运算的时候(或者直接在sql中运算的时候),在新插入值的时候,可能会有null,这时如果进行运算,会报错,比如后台字段有totalminute,无论初始值怎么设置,在新建的时候 ...
- 646. Maximum Length of Pair Chain
You are given n pairs of numbers. In every pair, the first number is always smaller than the second ...
- 基于unoconv的在线office预览
这几天在搞在线文档预览,网上查了几种方案, 第一种:使用google的在线预览 -> 国内被Q,pass 第二种:使用第三方的,比如:永中dcs -> 要钱,pass 第三种:先转换为pd ...
- Kafka副本同步机制
引用自:http://blog.csdn.net/lizhitao/article/details/51718185 Kafka副本 Kafka中主题的每个Partition有一个预写式日志文件,每个 ...
- 《JAVA与模式》之装饰模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...
- java中常见的异常
空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:Arra ...
- 用switch函数根据选择不同的radio出现不同的视图
html代码: <!DOCTYPE html> <html> <head> <title></title> <style type=& ...
- Python小白学习之路(七)—【字典】【字典的功能】【布尔值】
字典(dict) 基本结构: d = {key1 : value1, key2 : value2 } dict = {'} key : value称为字典的键值对. 每个键 key和值value 之间 ...
- 数据结构---散列表查找(哈希表)概述和简单实现(Java)
散列表查找定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到给定值的key的对应f(key) ...
- 适配 iOS 11 & iPhone X 大全
1.升级iOS11后造成的变化 1. 1升级后,发现某个拥有tableView的界面错乱,组间距和contentInset错乱,因为iOS11中UIViewController的automatical ...




