内部类之局部内部类(内部类合集,第二篇,原理+细节)

第三篇:内部类之匿名内部类(内部类合集,第三篇,原理+细节+实现)-CSDN博客

上篇文章:面向对象高级部分---内部类,什么是内部类,内部类的划分,为什么要用内部类?-CSDN博客,我们已经阐述了什么是内部类以及内部类的划分。

接下来,我们仔细阐述内部类中的----局部内部类。

请各位一定要把握一个核心-----内部类也是类,局部内部类是指内部类处在局部变量的位置,大家对这个一定要有一个位置的感觉,再结合局部变量的特点和类的特点去学习就不会有问题。

什么是局部内部类?

处于外部类的局部位置(局部变量的位置,也就是方法体中,或者代码块中),并且有类名(这是和匿名内部类区分的关键)

class outer{//外部类

    public void mathed1(){//方法

        class inner{//局部内部类
    
        }
    }
}

class other{//其他类

}

局部内部类是不能添加访问修饰符的(怎么理解呢?它虽然是一个类,具备类的特性,但所处的位置是在外部类的局部变量位置,而局部变量是没有访问修饰符的,因此,局部内部类是不能添加访问修饰符的!), 但局部内部类可以用final修饰(局部变量是可以用final修饰的,所以局部内部类也可以用,同时表达的意思是该内部类不可以再被继承),局部内部类的作用域仅仅只有方法体或者代码块中,和局部变量的作用域是一样的。

总结下来,一定要把局部内部类这几个字拆开看,局部代表身处局部变量的位置,因此受到局部变量的规则约束,但它同时也是一个类,因此具备类的特性(也是可以继承的)

如何使用局部内部类?

局部内部类可以直接访问外部类的成员和方法(包含私有的)

外部类(outer类)访问局部内部类通过new的方式创建对象再访问内部类的成员和方法

外部其他类(other类)不能访问局部内部类---作用域不同,局部内部类和局部变量的作用域一样。

如果局部内部类的成员或方法和外部类的成员方法重名默认采用就近原则,如果想访问外部类的成员,可以采用 外部类名.this.成员 去访问(外部类名.this 指代的就是当前对象)。请看下面的例子


public class LocalInnerClass {//
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
    }
}
class Outer02 {//外部类
    private int n1 = 100;
    public void m1() {//方法
        final class Inner02 {//局部内部类(本质仍然是一个类)
            private int n1 = 800;
            public void f1() {
            //7. 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,
            // 使用 外部类名.this.成员)去访问
            // Outer02.this 本质就是外部类的对象, 即哪个对象调用了 m1, Outer02.this 就是哪个对象
                System.out.println("n1=" + n1 + " 外部类的 n1=" + Outer02.this.n1);
                System.out.println("Outer02.this hashcode=" + Outer02.this);
            }
        }
        //6. 外部类在方法中,可以创建 Inner02 对象,然后调用方法即可
        Inner02 inner02 = new Inner02();
        inner02.f1();
    }
}

局部内部类到这里所有的细节就已经阐述完了,大家看完后一定要对局部内部类有一个位置的感觉,梳理出一个框架,利用我说的本质去记忆,下一篇是匿名内部类,是重点中的重点,我会尽快更新,大家看爽了记得点个赞和关注,感谢大家!

第三篇:内部类之匿名内部类(内部类合集,第三篇,原理+细节+实现)-CSDN博客

你可能感兴趣的:(Java语言类,java,开发语言)