搞不懂内部类?看我 (一)


前言

内部类是程序员水平的一道分水岭,考验程序员实力的一部分。

内部类总共有四个:局部内部类、匿名内部类、成员内部类、静态内部类。

匿名内部类有三个结构:其他外部类、外部类、内部类。

要想搞明白匿名内部类的过程,一定要掌握好继承多态动态绑定内部类


一、局部内部类,你需要了解的细节?

(具体的例子都在下面的代码中,请结合实例观看,这里负责细节)

  1. 局部内部类是定义在 外部类的局部位置 ,通常在方法
  2. 局部内部类可以直接访问外部类的所有成员,包括私有的
  3. 局部内部类 不能添加访问修饰符 ,但是可以使用 final 修饰,如果使用 final 修饰,则该内部类不能被其它类继承
  4. 局部内部类的作用域: 仅仅在定义它的方法代码块
  5. 外部类在方法中,可以创建局部内部类对象,然后调用方法即可
  6. 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用(外部类名.this.成员) 去访问

二、话不多说,上代码!

package 内部类;

/**
 * 演示局部内部类的使用
 */
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer01 outer1 = new Outer01();
        outer1.m1();
        //为了印证 细节7
        System.out.println("outer2的hashCode = " + outer1);
    }
}

class Outer01{   //外部类
    private int  n = 10;    //私有属性
    private void m2(){//私有方法
        System.out.println("我是一个私有的方法");
    }   
    public void m1(){   //方法
        // 1、局部内部类是定义在 外部类的局部位置 ,通常在 方法 中
        // 3、局部内部类 不能添加访问修饰符 ,但是可以使用 final 修饰,
        // 如果使用 final 修饰,则该内部类不能被其它类继承!
        // 4、局部内部类的作用域: 仅仅在定义它的 方法 或 代码块 中
        final class Inner02{  //局部内部类(本资仍然一个类)
            private int n = 100;
            // 2、可以直接访问外部类的所有成员,包括私有的
            public void f1(){
                // 5、 局部内部类可以直接访问外部类的成员,比如下面:   外部类的属性 n 和 方法 m2()
                // 7、 如果外部类和局部内部类的成员重名时,默认遵循就近原则,
                //  如果想访问外部类的成员,使用(外部类名·this·成员) 去访问
                // 解读第34、35行代码:
                //  Outer2.this 本质就是外部类的对象,即哪个对象调用了m1(), Outer2.this就是哪个对象
                System.out.println("n = " + n + "  外部类的n = " +  Outer01.this.n);
                System.out.println("Outer2.this hashcode = " + Outer01.this);
                m2();
            }
        }
        // 6、外部类在方法中,可以创建Inner02对象,然后调用方法即可
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值