java中的内部类和匿名内部类

本文介绍了Java中的内部类,包括静态内部类、实例内部类和局部内部类,并通过示例展示了如何创建和使用它们。同时,文章探讨了匿名内部类的概念,解释了其在不创建单独实现类的情况下快速实现接口功能的方式,但也指出了其可能导致代码复杂、不易阅读的缺点。

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

一、内部类

1、 在类的内部又定义一个类,这个类称为内部类

2、内部类分为:静态内部类、实例内部类、局部内部类;

3、例如:

public class Text {
    //在类中,用static修饰的类叫静态内部类
    static class A{
        
    }
    //实例内部类
    class B{
        
    }
    public void doSome(){
        
        //在doSome方法中的类叫局部内部类
        class C{
            
        }
    }
}

4、new内部类;必须先newText然后再new B 

new Text().new A();

5、当doSome方法执行完毕,局部内部类C也就没了

6、外边的方法访问不了局部内部类

二、匿名内部类

1、匿名内部类是局部内部类的一种,因为没有类名,叫匿名内部类;

例如:不用匿名内部类

public class Text {
    public static void main(String[] args) {
        A a=new A();//创建A类对象
        a.summ(new B(),100,200);//传递参数
        
    }
   
}
//因为接口不能new对象,所以创建一个实现类
class B implements Jisuan{
    public int sum(int a,int b){
        return a+b;
    }
}
//计算接口
interface Jisuan{
    int sum(int a,int b);
}

class A{
    //求和方法
    public void summ(Jisuan c,int a,int b){
        int Value=c.sum(a,b);//调用接口中的sum方法
        System.out.println(a+"+"+b+"="+Value);
    }
    
}

用匿名内部类:

public class Text {
    public static void main(String[] args) {
        A a=new A();//创建A类对象
       //a.summ(new B(),100,200);
        a.summ(new Jisuan() {   //这个地方大括号就是匿名内部类,不需要写实现类,
            public int sum(int a, int b) { //直接new接口后面写一个大括号,在大括号内写实现方法
                return a+b;
            }
        }, 100, 200);//传递参数

    }

}
//因为接口不能new对象,所以创建一个实现类
/*class B implements Jisuan{
    public int sum(int a,int b){
        return a+b;
    }
}*/
//计算接口
interface Jisuan{
    int sum(int a,int b);
}

class A{
    //求和方法
    public void summ(Jisuan c,int a,int b){
        int Value=c.sum(a,b);//调用接口中的sum方法
        System.out.println(a+"+"+b+"="+Value);
    }

}

使用匿名内部类的缺点:复杂、乱、不好读、没有名字不好复用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张同学%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值