带你深入学习java内部类_匿名类,细到不能再细~(2)

92 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情

内部类分类

我们刚刚大概了解了内部类的语法和使用,可能有点绕,没有捋清楚,不要急,bug郭带你仔细学一遍! 根据内部类在外部类中的位置可以分为4种:

  • 局部内部类,定义在外部类中的局部范围(方法和代码块中)
  • 匿名内部类(学习的重点和难点)也通常定义在局部
  • 成员内部类(定义在外部类的成员位置)
  • 静态内部类(用stataic修饰的内部类)

我会一一给大家详细介绍这四种内部类的使用方法和细节!

局部内部类

在外嵌类的局部位置,通常在方法中或代码块中!

局部内部类特点: 1.定义在外部类局部(方法或者代码块中) 2.作用域在局部,只能在他的作用域中使用(方法或者代码块中) 3.本质还是一个类(可以被继承) 4.属于局部变量,不能用限定符修饰(可用finall修饰后不可被继承) 5.内部类可以直接访问外部类中的属性和方法(包括private修饰) 6.外部类访问局部内部类,只能创建内部类对象访问(且只能在该局部中) 7.当外部类和内部类重名时,遵守就近原则

//局部内部类
class Outer{//外部类
    private int m = 10; //属性
    private static String s = "Outer";
    public void f1(){ //方法
        System.out.println("Outer::f1");
    }
    public void f2(){//方法
        /*
        局部内部类:
        1.定义在外部类局部(方法或者代码块中)
        2.作用域在局部,只能在他的作用域中使用(方法或者代码块中)
        3.本质还是一个类(可以被继承)
        4.属于局部变量,不能用限定符修饰(可用finall修饰后不可被继承)
        5.内部类可以直接访问外部类中的属性和方法(包括private修饰)
        6.外部类访问局部内部类,只能创建内部类对象访问(且只能在该局部中)
        7.当外部类和内部类重名时,遵守就近原则
         */
        class Inner {//内部类
            private int a = 12;//属性
            public void f2(){//方法
                System.out.println("Inner::f2");
                f1(); //局部内部类直接访问外部类成员和方法
                System.out.println("Outer:private m="+m+" Inner::a="+a);
            }
        }
        //外部类只能通过创建外部类对象访问内部类
        Inner inner = new Inner();
        inner.f2();//方法同名就近原则
        class Inner1 extends Inner {//继承Inner类
        }
    }
}
public class Test_1{
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.f2();
    }
}

在这里插入图片描述

因为有前面学习的基础,bug郭就不一一列举代码了,可以自行尝试!