匿名内部类为什么是内部类,

妖丶刀 2021-01-02 07:11:03
MyInterface objA = new MyInterface() {
@Override
public void method1() {
System.out.println("匿名内部类实现了方法!111-A");
}
};
objA.method1();

=号右边大概就是 new 接口() {重写所有抽象方法};
=号右边{}是(局部)内部类,
可以理解{}内是类,但为什么是内部类, 还是局部内部类, 求帮忙理解下
...全文
508 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸡窝里的毛 2021-01-03
  • 打赏
  • 举报
回复
引用 4 楼 qybao 的回复:
可以有局部内部类
类是一种自定义的变量类型,和局部变量一样,在方法内部定义的类就是局部类。
比如
class A {
public void test() {
class AA {//在方法内部定义的类属于局部类,该类只在方法内可见
public void test() {System.out.println(“AA”);}
};
AA aa = new AA();
aa.test();
}
}

new 接口{实现接口方法} 的 接口{实现接口方法} 这部分属于类的定义,因为在方法内部,所以是局部内部类,同时因为该类没有名字,所以是匿名类。通常,因为是匿名类,所以没法在其他地方重新new一个匿名类的实例,所以这个局部不局部就没那么大意义了,所以通常这个局部就被忽略了。
至于为什么是内部类?可想而知,类中有类,内层的类相对于外层来说当然就是内部类了(在外层类的内部中定义的类)。
所以就叫匿名(局部)内部类。


哈是可以,Java在这方面也分得太细致了
鸡窝里的毛 2021-01-03
  • 打赏
  • 举报
回复
引用 5 楼 妖丶刀 的回复:
[quote=引用 3 楼 icoolno1 的回复:]这是一个语法糖,通常我们需要显式定义一个实现类,然后再实例化,因为仅使用一次,所以定义成内部类,可能还是私的,防止被其它类所引用。而用了匿名类后,编译器会自动生成一个内部类实现接口或抽象方法,然后再实例化,可以简化这种一次使用的接口。

没有局部内部类的说法,内部类就是顶层类里边申明一个成员类。

内部类分成员内部类&局部内部类呀 你说的"顶层类里边申明一个成员类"叫成员内部类


[/quote]

局部内部类确实有,不过这没啥问题(很少有人直接在代码中定义局部内部类吧),只是申明位置不同而已,将内部类放在方法中,作用范围也就限定在方法体内。


妖丶刀 2021-01-02
  • 打赏
  • 举报
回复
引用 3 楼 icoolno1 的回复:
这是一个语法糖,通常我们需要显式定义一个实现类,然后再实例化,因为仅使用一次,所以定义成内部类,可能还是私的,防止被其它类所引用。而用了匿名类后,编译器会自动生成一个内部类实现接口或抽象方法,然后再实例化,可以简化这种一次使用的接口。 没有局部内部类的说法,内部类就是顶层类里边申明一个成员类。
内部类分成员内部类&局部内部类呀 你说的"顶层类里边申明一个成员类"叫成员内部类
qybao 2021-01-02
  • 打赏
  • 举报
回复
可以有局部内部类 类是一种自定义的变量类型,和局部变量一样,在方法内部定义的类就是局部类。 比如 class A { public void test() { class AA {//在方法内部定义的类属于局部类,该类只在方法内可见 public void test() {System.out.println(“AA”);} }; AA aa = new AA(); aa.test(); } } new 接口{实现接口方法} 的 接口{实现接口方法} 这部分属于类的定义,因为在方法内部,所以是局部内部类,同时因为该类没有名字,所以是匿名类。通常,因为是匿名类,所以没法在其他地方重新new一个匿名类的实例,所以这个局部不局部就没那么大意义了,所以通常这个局部就被忽略了。 至于为什么是内部类?可想而知,类中有类,内层的类相对于外层来说当然就是内部类了(在外层类的内部中定义的类)。 所以就叫匿名(局部)内部类。
鸡窝里的毛 2021-01-02
  • 打赏
  • 举报
回复
这是一个语法糖,通常我们需要显式定义一个实现类,然后再实例化,因为仅使用一次,所以定义成内部类,可能还是私的,防止被其它类所引用。而用了匿名类后,编译器会自动生成一个内部类实现接口或抽象方法,然后再实例化,可以简化这种一次使用的接口。

没有局部内部类的说法,内部类就是顶层类里边申明一个成员类。
妖丶刀 2021-01-02
  • 打赏
  • 举报
回复
我知道了 new的其实是接口子类对象(实现类) 就要调用构造方法 方法内部的类叫局部内部类
妖丶刀 2021-01-02
  • 打赏
  • 举报
回复
有大佬能指点下吗

62,624

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧