内部类概述

内部类是将一个类定义在另一个类里面,对里面那个类就成为内部类(内部类,嵌套类)。

当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容

访问特点

内部类可以直接访问外部类的所有成员,包括私有,之所以可以直接访问,是因为内部类持有外部类对象的引用,Outer.this

而外部类想要访问内部类必须创建对象或者使用类名引用

其他类访问内部类格式

Outer.Inner in = new Outer().new Inner();

内部类的位置

内部类定义在成员位置上

与其他成员一样,可以被static,private等修饰

静态内部类

静态内部类只能直接访问外部类的静态成员

  • 外部其他类访问静态内部类的非静态成员
    • new Outer.Inner().function();
  • 外部其他类访问静态内部类的静态成员
    • Outer.Inner.function();

注:

  • 当内部类定义了静态成员时,该内部类必须是静态的
  • 当外部类的静态方法访问内部类时,内部类必须是静态的

内部类定义在局部位置上

不可以被成员修饰符修饰

可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的变量

匿名内部类

匿名内部类其实就是内部类的简写形式

如果该内部类只需调用一次,那么我们不必定义在外部类中,可以直接使用匿名内部类,方便快捷

这是我以前写的一段总结

   1:  

   2:  

   3: //匿名对象要实例化的接口

   4: interface Head

   5: {

   6:         void think();

   7: }

   8: //匿名对象要实例化的类

   9: class Person

  10: {

  11:         private String name;

  12:         private int age;

  13:  

  14:         Person(String name,int age)

  15:         {

  16:                 this.name = name;

  17:                 this.age = age;

  18:         }

  19:  

  20:         public String toString()

  21:         {

  22:                 return name+"("+age+")";

  23:         }

  24:  

  25:         public void show()

  26:         {

  27:                 System.out.println(toString());

  28:         }

  29:  

  30:         

  31:         /*private class Person_head implements head

  32:         {

  33:                 void think()

  34:                 {

  35:                         System.out.println("Person thinking...");

  36:                 }

  37:         }*/

  38:  

  39:         public void function()

  40:         {

  41:                 //此处为匿名内部类,他结合了创建类和创建对象于一体

  42:                 //既创建了一个新的Education的子类,又new了一个这个子类的对象,而且这个对象是匿名的

  43:                 new Head()

  44:                 {

  45:                         public void think()

  46:                         {

  47:                                 System.out.println(Person.this.toString()+" thinking...");

  48:                         }

  49:                 }.think();

  50:  

  51:                 //此处为正常的内部类使用方法,就是被注释掉的代码部分

  52:                 //所以匿名内部类代码简洁很多,用起来很方便

  53:                 //Person_head ph = new Person_head();

  54:                 //ph.think();

  55:  

  56:  

  57:                 //注:匿名内部类的使用前提:必须是继承一个类或者实现接口,

  58:                 //    因为创建的部分要由父类或者接口的名字来完成

  59:                 //    匿名内部类要实现的方法最好不要超过3个,不然会很麻烦

  60:         }

  61: }

  62: class AnonymousDemo

  63: {

  64:         public static void main(String args[])

  65:         {

  66:                 AnonymousClassMethod_1();

  67:                 AnonymousClassMethod_2();

  68:         }

  69:  

  70:         //这应该是匿名对象的最初定义,即对象没有一个“名字”

  71:         public static void AnonymousClassMethod_1()

  72:         {

  73:                 //此处是正常创建对象的方法,对象有一个对应的引用p,所以可以多次调用p

  74:                 Person p = new Person("Sunny",2);

  75:                 p.show();

  76:                 p.show();

  77:                 //此处是匿名对象,新建的对象没有与其对应的引用来接受他,所以只能调用一次

  78:                 new Person("Sunny",2).show();

  79:  

  80:                 //注:一般对象的方法只调用一次时,可以使用匿名对象,也可将匿名对象作为参数传递给函数

  81:         }

  82:         public static void AnonymousClassMethod_2()

  83:         {

  84:                 //用一个Person类的匿名对象调用function

  85:                 //此处使用了匿名内部类,详见Person类中的function实现方法

  86:                 new Person("Sunny",2).function();

  87:         }

  88:  

  89: }

Java笔记(十六)……内部类的更多相关文章

  1. “全栈2019”Java第九十六章:抽象局部内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  3. “全栈2019”Java第二十六章:流程控制语句中循环语句do-while

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. “全栈2019”Java第十六章:下划线在数字中的意义

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. (C/C++学习笔记) 十六. 预处理

    十六. 预处理 ● 关键字typeof 作用: 为一个已有的数据类型起一个或多个别名(alias), 从而增加了代码的可读性. typedef known_type_name new_type_nam ...

  6. Java基础学习笔记十六 集合框架(二)

    List List接口的特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的. 它是一个带有索引的集合,通过索引就可以精 ...

  7. Java 读书笔记 (十六) Java 继承

    例: 开发动物类,其中动物分别为企鹅以及老鼠,要求如下: 企鹅: 属性(姓名,id), 方法(吃,睡,自我介绍) 老鼠: 属性(姓名,id), 方法(吃,睡,自我介绍) 企鹅类: public cla ...

  8. Java学习笔记十六:Java中的构造方法

    Java中的构造方法 1.使用new+构造方法 创建一个新的对象: 2.构造方法是定义在Java类中的一个用来初始化对象的方法: 3.构造方法与类同名且没有返回值: 4.语法格式: public 构造 ...

  9. Java提高十六:TreeMap深入分析

    上一篇容器元素比较Comparable&Comparator分析的时候,我们提到了TreeMap,但没有去细致分析它,只是说明其在添加元素的时候可以进行比较,从而使得集合有序,但是怎么做的呢? ...

随机推荐

  1. bottle + vue.js 打造你的单页应用

    看到各种单页应用之后,觉得单页应用简直酷毙了,作为一个技术宅,在假期的 时候恶补了一下vue ,觉得还不错,不过想想前端的东西毕竟还是太广博了.我也不知道怎么写反正应用起来有点别扭,就是资料太少了,成 ...

  2. hdu 5429 Geometric Progression 高精度浮点数(java版本)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5429 题意:给一段长度不超过100的每个数字(可以是浮点数)的长度不超过1000的序列,问这个序列是否 ...

  3. MVC-ActionResult解说

    HttpNotFoundResult: 专门用来响应Http404找不到网页的错误,在System.Web.Mvc.Controller类别中内建了一个HttpNotFound()方法,可以很方便的回 ...

  4. UIWebView与JS的深度交互-b

    要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img > ...

  5. 微软Hololens学院教程-Hologram 210 Gaze(凝视)【微软教程已经更新,本文是老版本】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...

  6. unity3d 下操作excel 与打印

    原地址:http://www.colabug.com/thread-1146390-1-1.html 因项目需要,需在unity下实现写入excel.打印功能.因之前在winform里操作过excel ...

  7. IDEA 使用 SVN的一个注意点

    IDEA是调用SVN.EXE来实现相关版本管理功能的,所以必须要安装visualSVN,然后再使用相关功能!

  8. DHTMLX 前端框架 建立你的一个应用程序 教程(十)--保存表单中的数据

    保存表单中的数据 现在我们所要做的是 当用户点击提交按钮的时候  我们将表单中的数据进行保存操作. 我们可以使用dhtmlxDataProcessor. 来进行操作.它是一个数据组件,可以提供与服务器 ...

  9. 关于mIdleHandlers 空闲消息

    模拟情况说明 创建一个handler对象 该handler持有的是主线程 1.先发送一个延时20秒的message what=35;2.紧接着又发送一个延时10秒的Runnable3.在该Runnab ...

  10. C#技术------垃圾回收机制(GC)

    GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...