内容思路来自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+Hibernate开发小区物业管理系统 附源码

    开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mo ...

  2. Python实现图片识别加翻译【高薪必学】

    Python使用百度AI接口实现图片识别加翻译 另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而而流一思(数字 ...

  3. BUUCTF知识记录

    [强网杯 2019]随便注 先尝试普通的注入 发现注入成功了,接下来走流程的时候碰到了问题 发现过滤了select和where这个两个最重要的查询语句,不过其他的过滤很奇怪,为什么要过滤update, ...

  4. ubuntu 更改pip默认源

    mkdir ~/.pip vim ~/.pip/pip.conf [global] timeout = 6000 https://pypi.tuna.tsinghua.edu.cn/simple 保存 ...

  5. crm系统和e_store商场的比较总结

    e_store用了:Java.Servlet.JSP.Oracle.JQuery.Mybatis,tomcat技术 crm用了 :Java.JSP.Oracle.JQuery,Mybatis,spri ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定单词首字母大写

    <!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...

  7. Vim 入门使用

    参考资料:https://www.runoob.com/linux/linux-vim.html   本篇内容不全,其余内容请参考该链接 vim/vi 是Linux下常用的文本编辑工具,它基本上有三种 ...

  8. 【转载】Cmd Markdown 公式指导手册

    目录 Cmd Markdown 公式指导手册 一.公式使用参考 1.如何插入公式 2.如何输入上下标 3.如何输入括号和分隔符 4.如何输入分数 5.如何输入开方 6.如何输入省略号 7.如何输入矢量 ...

  9. Linux命令:route命令

    route显示或修改IP路由表 route -n:显示路由信息,使用数字格式显示,不反解地址到主机名 #route -n Kernel IP routing table Destination Gat ...

  10. 使用TortoiseGit处理代码冲突

    使用TortoiseGit处理代码冲突  https://www.cnblogs.com/jason-beijing/p/5718190.html 场景一  user0 有新提交 user1 没有pu ...