java内部类介绍

内部类一共分为4种

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类

下面我会为大家详细介绍每一个内部类!!

成员内部类

  成员内部类就好像是外部类的一个成员属性,也是内部类中最常见的一种,成员内部类也称为普通内部类

  定义格式:

    

    

 需要注意的有一下几点:

  

   1.内部类可以使用外部类的private , public 等修饰符修饰的变量,如果有重名变量默认使用自己的

       如果想使用外部类的需要 外部类.this.变量 方式调用重名变量,如果不是重名变量则可以直接是使用

    2.外部类无法直接使用内部类变量

    测试使用成员内部类方法

    同过以上例子可看出外部类是没有办法直接对内部类进行访问的,那该如何访问呢? 看下面

   3.外部类访问内部类必须只能通过 外部类对象.new 内部类() 实例出内部类对象,然后就可以使用内部了

   4.运行代码以后会出现两个class文件

静态内部类

  1. 静态内部类与成员内部类的区别在于静态内部类只能直接访问外部类的静态属性,
  2. 如果想要访问外部类的非静态属性只能通过new 外部类对象().外部类非静态属性;
  3. 如果外部类静态属性与内部类静态属性一致,在内部类中默认访问自己的静态属性,如果想要访问外部类重名对象只能通过类名.重名静态属性方式
  4. 创建内部类对象可以直接通过可以直接创建 内部类 对象名= new 内部类()

匿名内部类

匿名内部类是不能有名称的类,所以没有办法引用他们,必须在创建时,作为new语句的一部分来声明他们

但是使用匿名内部类还有个前提条件:必须继承父类或者实现一个接口

这就要采用另一种形式new语句,如下所示:

new<类或接口><类的主题>

这种形式的new语句声明一个新的匿名内部类,他对一个给定的类进行扩展,,或实现一个给定的接口,他还创建那个类的一个新实例,并把它作为语句的结果返回.

要扩展的类和要实现的接接口是new语句的操作数,然后跟匿名内部类的主体

注意匿名内部类的声明是在编译器进行的,实例化是在运行时进行的,这就意味着for云鬟中的一个new语句会创建相同的几个匿名内部类,而不是创建几个不同的匿名内部类的实例

从技术上说 : 匿名内部类视为非静态的内部类,所以他们具备和方法内部声明的非静态类相同的权限和限制

假如要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能所属的类过于简单,或者它的内部只有一个方法),匿名内部类就显的很有用,匿名类尤其适合在swing应用程式中快速常见事件

处理程序,以下是一个匿名内部类的实例:

 

从上面的例子可以看出,只要一个类是抽象的或者是一个借口,那么其子类中的方法都可以使用匿名内部类来实现

使用匿名内部类需要注意以下几点!

1. 使用匿名内部类时,我们必须继承一个或者实现一个借口,但是两者不可以兼得,同时只能继承或者实现一个

2.匿名内部类中是不能定义构造函数的

3.匿名内部类不能存在任何静态成员变量和静态方法

4.匿名内部类作为局部内部类(及方法内部类),所以局部内部类的所有限制同样对一个匿名内部类生效

5.匿名内部类不能是抽象,它必须要继承的类或者实现的接口所有抽象类

方法内部类

  方法内部类简单一点需要注意一下几点?

    1.不能使用static修饰符与权限控制符

    2.方法内部类只能在方法内部使用

    3.如果方法与方法内部类有重名变量,方法内部类只能使用自己的

Java基础-内部类介绍的更多相关文章

  1. 第30节:Java基础-内部类

    内部类 // 外部类 class Demo{ private int num = 3; // 定义内部类 class Int{ void show(){ System.out.println(&quo ...

  2. Java 基础 内部类

    Java 基础 内部类 内部类(嵌套类) nested class 目的为外围类enclosing class提供服务. 四种: 静态成员类 static member class 非静态成员类 no ...

  3. JAVA基础——内部类详解

    JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...

  4. Java基础知识介绍

    数组的定义及初始化方式 数组对象创建没有() 一维数组 静态初始化: String[] books = {"Thinking in Java","Effective Ja ...

  5. Java基础-内部类-为什么局部和匿名内部类只能访问局部final变量

    先看下面这段代码: public class Test { public static void main(String[] args) { } public void test(final int ...

  6. Java基础-内部类-为什么成员内部类可以无条件访问外部类

    在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟.事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面 ...

  7. Java基础-内部类

    在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类 ...

  8. Java基础内部类、包的声名、访问修饰符、代码块整理

    内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...

  9. Java基础—内部类(转载)

    转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...

随机推荐

  1. js 从基础入门 到放弃 001

    快速入门  JavaScript代码可以直接嵌在网页的任何地方,不过通常我们都把JavaScript代码放到<head>中: <html> <head> <s ...

  2. 用node.js写一个简单爬虫,并将数据导出为 excel 文件

    引子 最近折腾node,最开始像无头苍蝇一样到处找资料,然而多数没什么卵用,都在瞎比比.在一阵瞎搞后,我来分享一下初步学习node的三个过程: 1 撸一遍NODE入门,对其有个基本的了解: 2 撸一遍 ...

  3. LINUX中如何查看某个端口是否被占用

    之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下: 1.netstat  -anp  |grep   端口号 如下,我以3306为例,netstat  -anp  |grep   ...

  4. 使用 spring.profiles.active 及 @profile 注解 动态化配置内部及外部配置

    引言:使用 spring.profiles.active 参数,搭配@Profile注解,可以实现不同环境下(开发.测试.生产)配置参数的切换 一.根据springboot的配置文件命名约定,结合ac ...

  5. Sip协议

    会话初始协议.SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的(请求应答的通讯模式).微信采用了自主研发的SYNC协议,他通过“握 ...

  6. Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】

    写在前面的: 作为一个控制专业的女研究生,不知道每天在研究什么,但总归逃脱不了码代码的命运.之前也学习过一些C语言.C++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...

  7. Mac 下安装node.js(转载)

    原文地址:http://blog.csdn.net/u011619283/article/details/52368759 Node.js 简介 Node.js 是一个用Chrome's V8 Jav ...

  8. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  9. android-zip解压缩方法

    /** * 解压缩文件到指定的目录. * * @param unZipfileName * 需要解压缩的文件(带路径) * @param mDestPath * 解压缩后存放的路径 **/ publi ...

  10. 美化checkbox多选框

    看到那些UI框架都是有美化checkbox多选框的,不过大多是图片或者是字体图标.于是就利用label仿了个多选框效果. <!DOCTYPE html> <html lang=&qu ...