匿名内部类到底定义在外部类的哪里?

hlhdidi 2016-06-11 05:45:56
很不懂啊,都说匿名内部类就是局部内部类,可是它是定义在哪个方法里面的呢?有的匿名内部类一下子实现了几个方法,那它到底是定义在哪里的?
public class Demo2 {
public static void main(String[] args) {
new Out(){
public void say() {
System.out.println("说话");
}
public void eat() {
System.out.println("吃饭");
}
}.say();
}
}
interface out{
public void say();
public void eat();
}

比方说上面的代码,main函数里用到了一个匿名内部类,那么这个内部类的外部类是Out接口吗?如果是,它定义在哪个方法里呢??
求大神解答,纠结Ing。。
...全文
358 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlhdidi 2016-06-19
  • 打赏
  • 举报
回复
引用 7 楼 MaxJemi 的回复:
好吧,我来给你简单整理一下: 首先,内部类知道吧,简单说就是定义在类中的的。内部类可以定义在类中的成员上(1.成员内部类),作为类中的成员,那么这个类就可以被静态(2.静态内部类)。内部类还可以定义在类的方法中(3.局部内部类),现在,就有一种最特殊的内部类了,叫做~~~~~~~匿名内部类!是 记住!! 它是一种 无名的局部内部类。 匿名内部类特点: 1. 是一种特殊的局部内部类,定义在方法中 2. 匿名内部类中不能添加方法,这个二货连名字都没用,你添加方法有用吗!?你添加的方法能调用吗?不能! 然而,哥们就说了,靠,楼主上面不是写着吗,    new Out(){             public void say() {                 System.out.println("说话");             }             public void eat() {                 System.out.println("吃饭");             }         }.say(); 这不明明有两个方法嘛? 注意,这里的方法不是你添加的,而是重写的。 所以,匿名内部类必须继承抽象类或者实现接口!!!! 3.匿名内部类不能写构造方法,我就不解释了,一字一字打的我累~ 总的来回答一下楼主的问题,匿名内部类可以说是一种最特殊的局部内部类,定义在方法内(楼主不就是定义在main里面了)。 匿名内部类必须继承抽象类或者实现接口,必须重写父类或者接口里面的所有抽象方法。然而悲哀的是,定义匿名内部类一次只能调用一个方法。就像楼主的例子一样,new out(){此处省略一万字}.say();那么问题就来了,我要调用 eat方法怎么办呢,这么办,new out(){此处省略一万字}.eat(); 呵呵,这不成了两对象了嘛~~~~~~ 要同时调用say()和eat()就别匿名了呗~是吧,有道理吧 。。。有道理,是不是该给分啊!
谢谢你的回答啊!!!才看到!!!!
w5325698 2016-06-15
  • 打赏
  • 举报
回复
在主类的main方法之外的任何地方。
MaxJemi 2016-06-13
  • 打赏
  • 举报
回复
好吧,我来给你简单整理一下: 首先,内部类知道吧,简单说就是定义在类中的的。内部类可以定义在类中的成员上(1.成员内部类),作为类中的成员,那么这个类就可以被静态(2.静态内部类)。内部类还可以定义在类的方法中(3.局部内部类),现在,就有一种最特殊的内部类了,叫做~~~~~~~匿名内部类!是 记住!! 它是一种 无名的局部内部类。 匿名内部类特点: 1. 是一种特殊的局部内部类,定义在方法中 2. 匿名内部类中不能添加方法,这个二货连名字都没用,你添加方法有用吗!?你添加的方法能调用吗?不能! 然而,哥们就说了,靠,楼主上面不是写着吗,    new Out(){             public void say() {                 System.out.println("说话");             }             public void eat() {                 System.out.println("吃饭");             }         }.say(); 这不明明有两个方法嘛? 注意,这里的方法不是你添加的,而是重写的。 所以,匿名内部类必须继承抽象类或者实现接口!!!! 3.匿名内部类不能写构造方法,我就不解释了,一字一字打的我累~ 总的来回答一下楼主的问题,匿名内部类可以说是一种最特殊的局部内部类,定义在方法内(楼主不就是定义在main里面了)。 匿名内部类必须继承抽象类或者实现接口,必须重写父类或者接口里面的所有抽象方法。然而悲哀的是,定义匿名内部类一次只能调用一个方法。就像楼主的例子一样,new out(){此处省略一万字}.say();那么问题就来了,我要调用 eat方法怎么办呢,这么办,new out(){此处省略一万字}.eat(); 呵呵,这不成了两对象了嘛~~~~~~ 要同时调用say()和eat()就别匿名了呗~是吧,有道理吧 。。。有道理,是不是该给分啊!
MoYoon 2016-06-13
  • 打赏
  • 举报
回复
匿名内部类是为了实现一个接口或继承抽象类的,它没有名字,所以创建一次实现一次。既然用到new通常在main方法里进行实例化。
家里敷泥呀 2016-06-12
  • 打赏
  • 举报
回复
你可以看class文件,会编译出Demo2$1之类的,这个$1就是匿名内部类,从属于Demo2
考拉一枚 2016-06-12
  • 打赏
  • 举报
回复
匿名内部类之所以匿名就是因为它没有一个内部类的完整声明,其实就相当于在Demo2内部声明一个类实现out接口,然后再new一个这个类
hlhdidi 2016-06-11
  • 打赏
  • 举报
回复
引用 2 楼 qq_29510269 的回复:
匿名内部类在功能上也可以称为局部内部类,楼主的程序应该是定义在main方法里,它的外部类应该是Demo2这个类。
这样!我忽略了main方法。。谢谢你的回答!
MoYoon 2016-06-11
  • 打赏
  • 举报
回复
匿名内部类在功能上也可以称为局部内部类,楼主的程序应该是定义在main方法里,它的外部类应该是Demo2这个类。
hlhdidi 2016-06-11
  • 打赏
  • 举报
回复
求解答。。。

62,628

社区成员

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

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