内部类学习

    定义在类的内部的类  叫做内部类
    包含了内部类的类 叫做外部类
内部类的作用 
    内部类是为了 实现 java中 多继承而存在的 
    内部类 可以继承其他类  
内部类的种类 
    1. 成员内部类
    2. 静态内部类
    3. 局部内部类
    4. 匿名内部类

成员内部类

    概念    
        内部类定义在 外部类的 类体中  , 方法外 , 语句块之外 的类 .
    特性
        成员内部类 作为外部类的成员出现  , 类似于 成员变量  
        
        1. 成员内部类 不允许有静态的成员存在 ,但是可以有static final这不是静态属性是静态常量,要赋值

 2. 成员内部类 依附于外部类的对象存在  类似于成员变量
            如果此时成员内部类 有静态成员  此时就会有冲突
            成员内部类在没有外部类的对象就不会存在 , 静态成员就要优先加载 
            两者冲突  故不可以在 成员内部类中  定义静态成员
    
 3. 成员内部类 , 可以有 static final 修饰的属性
            这里是 final 修饰符起作用   有 final 修饰它首先是常量 , 其次才是 静态的属性
            final 修饰的没有优先加载之说
            final 是在编译期就确定的常量  

 4. 成员内部类的作用范围  : 整个外部类
 
5. 成员内部类 可以直接访问 外部类的 属性 和 方法 
            
6. 成员内部类 可以 访问 外部类的 私有的属性 和 方法    new 私有的构造器

 7. 成员内部类  外部类可以定义同名的属性和方法  , 优先使用的是 内部类的属性和方法
            使用 外部类类名.this.属性  使用外部类的属性
            使用 外部类类名.this.方法  使用外部类的方法

 8. 外部类 不可以直接访问 成员内部类的成员   属性 方法 构造器
                外部类可以创建内部类的对象  , 然后可以 间接的访问 属性 方法
9. 外部类不可以直接 new 内部类的对象  如何创建内部类对象呢  ?
            成员内部类 作为 外部类的一个成员存在  且是非静态成员
            成员内部类 依附于 外部类的对象存在 
            外部类的对象 , 不存在  那么成员内部类也不能 存在
        
            我们要先 创建 外部类的对象  , 然后根据外部类的对象  , 创建内部类的对象

静态内部类

    概念 
        当成员内部类 , 被 static 修饰的时候 , 它就从成员内部类 变成了静态内部类
   特性 : 
        静态内部类  作为外部类的 静态成员存在  
        和 成员内部类 有很大的区别
        静态内部类 不依附 外部类的对象

1. 允许有静态的成员    属性 方法 

 2. 允许非静态的成员存在  属性  方法 
        
 3. 作用范围 整个类
        
 4. 静态内部类 不可以直接访问 外部类的 非静态属性 

    可以直接访问外部类的 静态属性

5. 静态内部类  不可以直接访问 外部类的 非静态方法
               可以直接访问 外部类的 静态方法

6. 静态内部类    可以直接创建 外部类的对象

7. 外部类可以直接访问 内部类的静态属性  类名.属性名
                 不可以直接访问 内部类的非静态属性

8. 不是外部类的类  可以直接访问 内部类的静态属性  类名.属性名

                 不可以直接访问 内部类的非静态属性

9 . 方法 同上 , 静态方法可以被外部类  , 不是外部类的类 直接访问
                非静态方法  不可以被直接访问
 
10. 在外部类中 如何访问 静态内部类的  非静态的属性 和 方法 
                创建内部类的对象即可间接的访问
                外部类 内部类 没有权限的限制

11. 在不是外部类的类中 如何访问 静态内部类的  非静态的属性 和 方法 
                创建内部类的对象 
                不是外部类 访问 内部类 有权限限制(private不能访问)

12. 外部类如何创建 静态内部类的对象 
                直接创建
13. 不是外部类的类如何创建 静态内部类的对象 
                直接创建
                但是类型是  外部类名.内部类名

局部内部类

    概念
        当成员内部类  出现在方法内 或者语句块内  它就是局部内部类        类似于局部变量
    特性:
        1. 不能被 static 修饰 
            static 共享的  冲突

2. 局部内部类 可以同名  , 但是需要在 不同作用范围 里

3. 局部内部类的作用范围  : 从声明处开始 , 直到其所在的语句块结束

4. 局部内部类  可以直接访问 本方法 或 语句块 , 在作用的范围的局部变量
                不可以直接访问 本方法 或 语句块 , 超出作用范围的局部变量
5. 局部内部类存在于静态方法 或者 代码块  , 只可以访问 静态的方法 属性
            若存在于 非静态方法里 或代码块 , 静态的方法 和 属性 都能够访问

 6. 在局部内部类的作用范围内  在外部类中  能否直接访问 局部内部类的 属性 方法
                可以创建 内部类 的对象 来进行间接的访问
7. 成员内部类  和 局部内部类 可以同名吗 ?
                可以

8. 在作用范围内 优先使用局部内部类  

匿名内部类

特性 : 
        1. 匿名内部类 出现在方法内 就要遵守 局部内部类的约束

   2. 匿名内部类 出现在方法外 语句块 , 则是成员匿名内部类  要遵守成员内部类的约束    

     3. 匿名内部类 最终的作用是把自己 创建一个对象  , 使用时也是用这个对象
            这个对象一定是父类型的 
            有静态绑定 最好别定义        最好不要定义属性
            动态绑定 可以定义         基本就是定义非静态方法

    4. 匿名内部类不可以有构造器  
            如果想要赋值 可以使用语句块
 
   5. 匿名内部类是完全为  继承 实现  而存在的

大数据学习--day12(内部类)的更多相关文章

  1. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  2. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  3. 大数据学习系列之六 ----- Hadoop+Spark环境搭建

    引言 在上一篇中 大数据学习系列之五 ----- Hive整合HBase图文详解 : http://www.panchengming.com/2017/12/18/pancm62/ 中使用Hive整合 ...

  4. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  5. 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试

    前言 在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为h ...

  6. 大数据学习之Linux进阶02

    大数据学习之Linux进阶 1-> 配置IP 1)修改配置文件 vi /sysconfig/network-scripts/ifcfg-eno16777736 2)注释掉dhcp #BOOTPR ...

  7. 大数据学习之Linux基础01

    大数据学习之Linux基础 01:Linux简介 linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹 在1991年10月5日首次发布.,在加上用户空间的应用程序之后 ...

  8. 大数据学习:storm流式计算

    Storm是一个分布式的.高容错的实时计算系统.Storm适用的场景: 1.Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中. 2.由于Storm的处理组件都是分布式的, ...

  9. 大数据学习系列之—HBASE

    hadoop生态系统 zookeeper负责协调 hbase必须依赖zookeeper flume 日志工具 sqoop 负责 hdfs dbms 数据转换 数据到关系型数据库转换 大数据学习群119 ...

随机推荐

  1. C#中的基础数据类型

    一.C#有15个预定义类型,13个值类型,两个引用类型(string和object): 1.整型 int a=15; short a=15; 2.浮点类型 float a=12.9; double a ...

  2. Struts 2 官方文档中文版

    最近正在学 Struts 2 ,咱英文水平不行啊,找到了<Struts 2 官方文档中文版>,虽然翻译的不全,有总比没有强. 地址:https://cwiki.apache.org/con ...

  3. python错误和异常(1)

    1  SyntaxError: Python解释器语法错误,是唯一不是在运行时发生的异常. 2 检测和处理异常 try语句有两种主要形式:try-except 和 try-finally. 只能二选一 ...

  4. HAProxy负载均衡保持客户端和服务器Session亲缘性的3种方式

    1 用户IP 识别  haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令) 配置指令: balance source 配置实例: backe ...

  5. 沉淀再出发:java中的HashMap、ConcurrentHashMap和Hashtable的认识

    沉淀再出发:java中的HashMap.ConcurrentHashMap和Hashtable的认识 一.前言 很多知识在学习或者使用了之后总是会忘记的,但是如果把这些只是背后的原理理解了,并且记忆下 ...

  6. 深入浅出VisualStudio——使用NuGet来安装AjaxControlToolKit

    使用NuGet可以加速配置Visual Studio 2010的开发环境. 1.创建一个空的ASP.NET web站点项目. 2.右键单击此web 站点,选择Manage NuGet Packages ...

  7. 36、XmlReader与 XMLWriter(抽象类)

    一.概述 XMLReader为抽象类,其派生类有:XmlDictionaryReader.XmlNodeReader.XmlTextReader(与IO命名空间中的TextReader对象一起使用). ...

  8. Sublime 正则替换

    打开替换的窗口 在Find What 写入待匹配的正则表达式,然后在Replace With写上要替换的内容($1代表第一个括号内内容,依次类推) 然后选择对应的选项

  9. POJ 3107 Godfather(树的重心)

    嘟嘟嘟 题说的很明白,就是求树的重心. 我们首先dfs一遍维护每一个点的子树大小,然后再dfs一遍,对于一个点u,选择子树中size[v]最小的那个和n - size[u]比较,取最大作为删除u后的答 ...

  10. C、CSL 的密码 【set暴力 || 后缀数组】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛 )

    题目传送门:https://ac.nowcoder.com/acm/contest/551/C 题目描述 众所周知,CSL 最喜欢的密码是 ******.于是有一天……     为了改变这一点,他决定 ...