内部类

    xiaoxiao2025-05-28  7

    将一个类定义在另一个类里面,对里面那个类就称为内部类(内置类,嵌套类)。

    访问特点:

    内部类可以直接访问外部类中的成员,包括私有成员。而外部类要访问内部类中的成员必须要建立内部类的对象。一般用于类的设计。分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容,这时就是还有的事物定义成内部类来描述。(孙悟空阶芭蕉扇,进铁扇公主的肚子,孙悟空是内部类,铁扇公主是外部类)

    class Outer { private static int num=3; static class Inner//内部类 { void show() { System.out.println("show run"+num); } static void function()//如果内部类中定义静态成员,该内部类也必须是静态的。 { System.out.println("function run"+num); } } public void method() { Inner in=new Inner(); in.show(); } }

    class InnerClassDemo { public static void main(String[]args) { Outer out=new Outer(); out.method(); //直接访问外部类中的内部类中的成员。。 Outer.Inner in=new Outer().new Inner(); in.show(); //如果内部类是静态的,相当于外部类。 Outer.Inner in=new Outer.Inner(); in.show(); //如果内部类是静态的,成员是静态的。(那就不用对象了) Outer.Inner.function(); } }

    内部类-细节

    为什么内部类能直接访问外部类的成员呢?

    那是因为内部类持有了外部类的引用。外部类名.this

    class Outer { int num=3; class Inner { int num=4; void show() { int num=5; System.out.println(num);//System.out.println(Outer.this.num); } } void method() { new Inner().show(); } } class InnerClassDemo2 { public static void main(String[] args) { new Outer().method();//输出5 } }

    内部类-局部内部类

    内部类可以存放在局部位置上。

    内部类在局部位置上只能访问局部中被final修饰的局部变量。

    class Outer { int num=3; void method() { final int x=9; class Inner { void show() { System.out.println("show..."+x);//从内部类中访问局部变量x,需要被声明为最终类型final } } Inner in=new Inner(); in.show(); } } class InnerClassDemo3 { public static void main(String[]args) { new Outer().method(); } }

    匿名内部类

    匿名内部类。就是内部类的简写格式。

    必须有前提:

    内部类必须继承或者实现一个外部类或者接口。

    匿名内部类:其实就死一个匿名子类对象。

    格式:new 父类or接口()(子类内容)

    astract class Demo { abstract void show(); } class Outer { int num=4; /* class Inner extends Demo { void show() { System.out.println("show..."+num); } } */ public void method() { //new Inner().show(); new Demo//匿名内部类。 { void show() { System.out.println("show......."+num); } } } } class InnerClassDemo4 { public static void main(String[]args) { new Outer().method(); } }

    匿名内部类-应用

    interface Inter { void show1(); void show2(); }

    通常使用场景之一:

    当函数参数是接口类型时,而且接口中的方法不超过三个。

    可以用匿名内部类作为实际参数进行传递。

    class Outer { /* class Inner implements Inter { public void show1(); { } public void show2() { } } */ public void method() { //Inner in=new Inner(); //in.show1(); //in.show2(); Inter in=new Inter() { public void show1() { } public void show2() { } }; in.show1(); in.show2(); } } class InnerClassDemo5 { public static void main(String[]args) { show(new Inter()) { public void show1(); public void show2(); } } public static void show(Inter in) { in.show1(); in.show2(); } }
    转载请注明原文地址: https://ju.6miu.com/read-1299343.html
    最新回复(0)