Java内部类

本文详细解读了内部类,包括局部内部类的作用、匿名内部类的特点和使用场景,以及如何重写方法。通过实例演示,介绍了如何在外部类的方法中创建和调用内部类实例。特别强调了编译类型和运行类型的区别以及就近原则的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内部类是第五大成员

底层源码有大量的内部类

局部内部类

局部内部类是定义在外部类的局部位置,通常在方法,可以直接访问外部类的所有成员,包括私有的,不能添加访问修饰符,可以用final修饰
作用域仅在方法或代码块{}

public class Main{
    public static void main(String[] args){
        Outer o = new Outer();
        o.m();//100
    }
}

class Outer{
    private int n = 100;
    public void m(){
        class Inner{
            public void f(){
                System.out.println("n=" + n);
            }
        }
        Inner i = new Inner();
        i.f();
    }
    
}

外部类在方法中,可以创建内部类实例,然后调用方法即可

细节
不可直接访问
如果重名,遵从就近原则,如果想访问,用外部类.this.属性访问

匿名内部类

非常重要!!!
该类没有名字
分清编译类型(=左边)和运行类型(匿名内部类)即可
在底层,class xxxx implements TA(){

}

public class Main{
    public static void main(String[] args){
       IA t = new IA(){
           public void cry(){
               System.out.println("aaaa");
           }
       };
       System.out.println(t.getClass());//获得运行类型class Main$1
    }
}

interface IA{
    public void cry();
}

把实例的地址返回给t
匿名内部类使用一次就不能再次使用

匿名内部类使用、细节和实践

可以重写方法
如果是抽象类必须重写方法

匿名类不能写重写构造函数
会直接调用父类的

public class Main{
    public static void main(String[] args){
      IA t = new IA(){
          public void cry(){
              System.out.println("aaaa");
          }
      };
      t.cry();
    /*
    输出
    super.IA
	aaaa
    */
    }
}

class IA{
    public IA(){
        System.out.println("super.IA");
    }
    public void cry(){
        
    }
    
}

也可以直接调用

new IA(){
          public void cry(){
              System.out.println("aaaa");
          }
      }.cry();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值