内容思路来自Java编程思想,个人读书做的笔记,仅个人复习之用,故他人参考请自行辨别内容是否有错误。


在类的类部可以定义类,叫做内部类。如果这个内部类被static修饰,此时内部的类叫做嵌套类。

内部类用在哪里,解决了什么问题?


内部类中一定包含的有外部类的引用,即Outer.this,

故,创建内部类,必须拥有外部类的实例。

-

public class Outer {

    private String foo = "kitty";

    class Inner{
Outer getOuter(){
// 在内部类中,可以通过dot this语法引用外部对象
// 即 Outer.this
return Outer.this;
} public void bar(){
// 内部类可以访问外部类的任意属性
System.out.println(foo);
}
} public static void main(String[] args) {
// 同过外部类dot内部类的方式 声明一个引用
Outer.Inner inner = null; // 通过外部类实例dot new的方式创建一个内部类的实例
inner = new Outer().new Inner();
}
}

- 


嵌套类:看一种单例的写法。

-

public class Singleton {
private static Singleton instance = null; private static class Inner{
static{
instance = new Singleton();
}
} public static Singleton getInstance(){
return instance;
}
}

-

其实,单例其他的写法也有其他的

-

public class Singleton {
private Singleton(){}
private static class Inner{
private static final Singleton INSTANCE = new Singleton();
} public static Singleton getInstance(){
return Inner.INSTANCE;
}
} 

- 

值得思考的是,为啥会有内部类?内部类的出现解决了啥问题?这一部分需要多读几次java编程思想。我还是对这个东西不清不楚。

20190903:

1. 内部类可以理所当然的访问外部类的成员变量,就好像内部类原本就拥有他们似的;

2. 内部类区别于嵌套类,嵌套类不依赖于外部类,可以单独被实例化,但是内部类的实例化必须有外部类的实例;

3. 内部类的实例化必须要有外部类的实例,通过外部类实例点new的方式创建内部类实例;

4. 内部类好像可以屏蔽一些细节,外面的类看不到这些细节。同时内部类实现一些接口我继承一些类从而具有一定的功能,通过这些功能完成对外部类的数据进行操作,

而且,内部类的这些功能,外面的内有看不到,这样可以避免一些特定的方法或实现被其他代码调用;

5.内部类中可以通过外部类点this表示外部类的this。入Outer.this,这就是对外部类的引用;

6.现在看来内部类就是为了操作外部类的数据而存在的吧,内部类封装了一些特定但是很私有的一些功能。

-

java#内部类和嵌套类的更多相关文章

  1. “全栈2019”Java第六十七章:内部类、嵌套类详解

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

  2. Kotlin——最详细的抽象类(abstract)、内部类(嵌套类)详解

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索QQ群号:497071402 进入正题 在前面几个章节中,详 ...

  3. Java中的嵌套类和内部类

    以前看<Java编程思想>的时候,看到过嵌套类跟内部类的区别,不过后来就把它们的概念给忘了吧.昨天在看<数据结构与算法分析(Java语言版)>的时候,又遇到了这个概念,当时就很 ...

  4. Java开发笔记(五十四)内部类和嵌套类

    通常情况下,一个Java代码文件只定义一个类,即使两个类是父类与子类的关系,也要把它们拆成两个代码文件分别定义.可是有些事物相互之间密切联系,又不同于父子类的继承关系,比如一棵树会开很多花朵,这些花儿 ...

  5. java内部类以及匿名类

    内部类 一个类内部定义的类称为内部类. 内部类允许把逻辑相关的类组织在一起,并控制内部代码的可视性. 内部类与外部类的结构层次如下. 顶层类:最外层的类 外部类:内部类所在的类 内部类:类内部定义的类 ...

  6. Java学习笔记-嵌套类

    嵌套类 嵌套类有两种类别:static and non-static,分别对应为静态嵌套类和内部类. class OuterClass { ... static class StaticNestedC ...

  7. Java进阶07 嵌套类

    到现在为止,我们都是在Java文件中直接定义类.这样的类出现在包(package)的级别上.Java允许类的嵌套定义. 这里将讲解如何在一个类中嵌套定义另一个类. 嵌套 内部类 Java允许我们在类的 ...

  8. java内部类和异常类的概念

    1.内部类的外嵌类的成员变量在内部类中任然有效,内部类中的方法也可以调用外嵌类中的 方法,内部类中不可以声明类的变量和方法,外嵌的类体可以用内部类声明对象,作为外嵌类的成员.内部类仅供他的外嵌类使用. ...

  9. EffectiveJava(22)JAVA四种嵌套类的特点及用法

    嵌套类: 1.静态成员类 静态成员类是外围类的一个静态成员,遵守同样的可访问性规则 用法:a.作为公有的辅助类 内部类: 2.非静态成员类 语法上只和静态成员类的唯一区别是少一个static修饰符 a ...

随机推荐

  1. Struts2 处理AJAX请求

    Struts2整合AJAX有2种方式: 使用type="stream"类型的<result> 使用JSON插件 使用type="stream"类型的 ...

  2. 为什么需要NAT,目前家庭的计算机器如何上网?(原创)

    .什么是NAT?     字面翻译网络地址转换. 2.产生的背景    解决公网IP不足的问题.    官方规定,将IP地址资源进行分类,分为ABCDE,常用ABC三类,在每类中划分出了一些私有IP供 ...

  3. 解决HTML5(富文本内容)连续数字、字母不自动换行

    最近开发了一个与富文本相关的功能,大概描述一下:通过富文本编辑器添加的内容,通过input展示出来(这里用到了 Vue 的 v-html 指令). 也是巧合,编辑了一个只有数字组成的长文本,等到展示的 ...

  4. ubuntu16.04下安装docker和docker-compose

    开始安装 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:$ sudo apt-get remove docker docker-engine docker-ce dock ...

  5. 3_03_MSSQL课程_Ado.Net_数据导入

    数据库数据导出和导入 思路: --思路: 1.找到文件 2.读取文件 3.第一行 忽略 4.insert using System; using System.Collections.Generic; ...

  6. 学习笔记(16)- InsuranceQA_zh

    仓库地址:https://github.com/l11x0m7/InsuranceQA_zh Convolutional Neural Network for Chinese InsuranceQA ...

  7. js 判断时间大小

    //判断结束时间一定要大于开始时间 function comparativeTime(){ var isok=true; //早餐配送时间 var breakfastScanTimeMin = $(& ...

  8. Controller 层类

    package com.thinkgem.jeesite.modules.yudengji.web; import java.util.Date; import javax.servlet.http. ...

  9. for循环语句及批量创建用户!

    1.for 语句结构for 变量名 in 取值列表do命令序列done ================================================================ ...

  10. arduino#呼吸灯

    ; // 使用引脚号 void setup() { // nothing happens in setup } void loop() { // fade in from min to max in ...