zoukankan      html  css  js  c++  java
  • Java中的内部类

    内部类,外部类访问特点:

    内部类访问外部类的内容 直接可以访问的,包括私有的。
    外部类要想访问内部类的内容, 必须创建内部类的对象 对象调用。
    

    内部类的分类:

    成员内部类:在外部类的成员位置定义的内部类

    1:内部类创建对象的格式理解

    2:静态的成员内部类



    Inner 是属于 Outer的静态内容,静态的随着类的存在而存在的, 所以可以用类名调用

    3: 成员内部类访问当前外部类对象的内容



    成员内部类如何创建对象使用?
    外部类名.内部类名 对象名 = 外部类对象.内部类对象;
    Outer.Inner oi = new Outer().new Inner();//仅仅对public的内部类有效(我们通常使用private的内部类)

    成员内部类为什么创建对象的格式是这样的?
    直接写Inner找不到Inner在哪,这样写是用Outer限定一下,为什么可以这样限定呢?
    因为此时还没有在内存开辟空间,属于字节码级别,类似static
    告诉JVM Inner在Outer里面
    new Outer.new Inner()
    非静态的成员是随着对象的存在而存在的,
    没有Outer对象,Outer类里的成员是不能用的
    所以要想有Inner的对象,必须现有Outer的对象
    Outer o = new Outer();
    Outer.Inner oi = o.new Inner();
    修改而来的。

    4: 私有成员内部类




    局部内部类:

    public class Outer{
    public void show{
    局部内部类{}
    }
    }

    访问特点: 内部类访问外部类内容直接访问,外部类访问内部类的内容需创建对象访问

    局部内部类的运用:


    想办法让外界去使用Inner对象,也就是想办法把Inner对象扔出方法去,怎么从方法扔出去呢?
    方法的返回值就可以做到。
    把 Inner 对象扔出去,返回值类型 定义为 Inner类型就可以了。
    但是 Inner 是局部的东西,不能直接在外面写。
    这时候我们只能改变策略。返回值类型 是Inner类型的时候我们返回一个Inner对象,
    返回值类型是Inner的父类或者父接口类型的时候,我们依然也可以返回一个Inner对象。

    局部内部类可以访问局部变量,但是此时的局部变量视为前面有一个隐藏的final


    我们手动加final,则两次修改Outer_Method_num值的行为报错。

    我们不手动加final,且在Outer方法内修改Outer_Method_num的值(他此时对Inner类不是最终态了)则两次在局部内部类Inner中的Outer_Method_num调用都报错。

    我们不手动加final,也不在Outer方法内修改Outer_Method_num的值(他此时对Inner类是最终态度)则可以在局部内部类Inner中调用Outer_Method_num

    局部内部类中的匿名内部类

    我们想直接重写并且实现接口里的方法,但是想跳过新建一个类implements这个接口等等麻烦的步骤的时候,我们使用匿名内部类。
    我们想调用一下Face_Show方法



    因为之前太麻烦了,因此我们直接在Main函数里使用匿名内部类实现Face_Show方法。

  • 相关阅读:
    2020牛客暑期多校(三)
    贪心算法
    高级搜索题集
    状态压缩dp
    [kuangbin带你飞]专题二 搜索进阶
    [kuangbin带你飞]专题一 简单搜索
    HDU 1695 GCD(求两区间的互质数对+容斥原理)
    UVA 10200 Prime Time(简单素数判定预处理)
    HDU 1452 FZU 1053 Happy 2004(逆元函数+因子和函数+大指数取模化简公式)
    低三位的数是8的倍数就可以被8整除
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/11853383.html
Copyright © 2011-2022 走看看