匿名成员内部类和匿名内部类有什么区别
时间: 2023-06-02 21:03:25 浏览: 63
匿名成员内部类是指在一个类的成员变量或成员方法中创建一个没有名字的内部类,而匿名内部类可以是一个类或接口的实现类或继承类,没有具体的类名。匿名成员内部类必须有一个外部类的引用,而匿名内部类不需要。此外,匿名成员内部类只能访问其外部类的 final 成员变量和方法参数,而匿名内部类可以访问其外部类的所有成员变量和方法。
相关问题
匿名内部类和成员内部类有什么区别,用表格从多个维度表示
| 维度 | 匿名内部类 | 成员内部类 |
| --- | --- | --- |
| 定义方式 | 匿名内部类没有类名,通过实现接口或继承类来定义。 | 成员内部类是在外部类中定义的内部类,有自己的类名。 |
| 可读性 | 匿名内部类代码比较简洁,但是可读性较差,不便于维护。 | 成员内部类代码比较清晰,可读性较好,便于维护。 |
| 可访问性 | 匿名内部类只能在定义它的方法中使用,对外界不可见。 | 成员内部类可以被外部类和其他类访问,可以拥有public、protected、private等访问权限。 |
| 继承性 | 匿名内部类可以继承一个类或实现一个接口。 | 成员内部类可以继承一个类或实现一个接口,同时也可以扩展外部类。 |
| 实例化 | 匿名内部类可以直接使用new关键字来实例化。 | 成员内部类需要先实例化外部类,再通过外部类实例来创建成员内部类的实例。 |
| 内存占用 | 匿名内部类在编译时会生成一个class文件,会占用一定的内存空间。 | 成员内部类在编译时也会生成一个class文件,但是只有在实例化时才会占用内存空间。 |
| 作用范围 | 匿名内部类通常用于创建一次性的、不需要重复使用的对象。 | 成员内部类通常用于需要在多个方法中使用的对象。 |
匿名内部类和lambda表达式有何区别
匿名内部类是一个没有名称的类,它是在声明时被定义的。它可以继承一个类或者实现一个接口,并且可以在任何需要类或接口的地方使用。匿名内部类通常用于创建一次性的对象。
Lambda表达式是一种简写形式,用于编写简短的方法或代码块。它可以被视为匿名函数,可以被传递,存储和调用。Lambda表达式通常用于处理集合数据,如过滤,映射和排序。
两者的主要区别在于语法和用途。匿名内部类需要使用关键字“new”来实例化它,而Lambda表达式则使用箭头符号“->”来表示方法体。另外,匿名内部类可以访问外部类的成员变量和方法,而Lambda表达式只能访问final变量或者实际上是final变量的变量。
总之,Lambda表达式更加简明和灵活,适合于简单的函数式编程,而匿名内部类则更适合于创建一次性的对象和在需要时扩展类或接口。