黑马程序员技术交流社区

标题: 匿名内部类 [打印本页]

作者: qian0217wei    时间: 2015-5-5 00:16
标题: 匿名内部类
  1. interface Test
  2. {
  3.         void func();
  4. }
  5. class Demo
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 //补足代码;(匿名内部类)
  10.                
  11.         }
  12.         void show(Test t)
  13.         {
  14.                 t.func();
  15.         }
  16. }
复制代码

求大神讲解一下,该怎样书写匿名内部类!
作者: 挥斥方遒    时间: 2015-5-5 09:44
明显是要你在主方法里把show方法调用一下。但是得有Demo的对象,那就是Demo d = new Demo();然后d.show(这里需要Test类型的参数); 这个参数就得写匿名内部类了,因为Test是个接口。所以我们得直接实现个匿名内部子类就完事了。我写的也云里雾里。你先好好看看。
  1. Demo d=new Demo();
  2.                         d.show(new Test(){
  3.                                 void func(){
  4.                                         System.out.println("abc");
  5.                                 }
  6.                         });
复制代码


我这可能会出现访问权限问题。方法都改成public 就可以了。
作者: 痲ボㄋ.    时间: 2015-5-5 09:46
  1. interface Test
  2. {
  3.         void func();
  4. }
  5. class Demo
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 //补足代码;(匿名内部类)
  10.                                 show(new Test(){
  11.                                         public void func(){
  12.                                                 System.out.println("run.....");
  13.                                         }
  14.                                 });
  15.                
  16.         }
  17.        public static  void show(Test t)
  18.         {
  19.                 t.func();
  20.         }
  21. }
复制代码

不知道是不你需要的
作者: 挥斥方遒    时间: 2015-5-5 09:58
补充一下。。。重点在show方法的参数是个对象,而这个对象是用Test的匿名子类来创建的。匿名内部类:1、没有名字。2、继承了一个类或者实现一个接口,复写方法。3、创建对象,并调用。
作者: Ray丶少年    时间: 2015-5-5 10:12
本帖最后由 Ray丶少年 于 2015-5-6 08:06 编辑
  1. package demo;
  2. interface Test
  3. {
  4.         void func();
  5. }
  6. public class Demo
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 //补足代码;(匿名内部类)
  11.                 new Demo().show(new Test(){
  12.                         public void func(){
  13.                                 System.out.println("Function...Run");
  14.                         }
  15.                 });
  16.         }
  17.         void show(Test t)
  18.         {
  19.                 t.func();
  20.         }
  21. }
复制代码
需要访问本类中的show方法,通过新建本类对象去访问,且show方法需要传入一个参数,Test类型的对象那么就通过匿名内部类的方法创建Test接口的子类对象,并覆盖func方法

作者: 薛慧彬    时间: 2015-5-5 10:38
学着后边的把前边的都快忘了。。。。。:L
作者: qian0217wei    时间: 2015-5-6 00:14
痲ボㄋ. 发表于 2015-5-5 09:46
不知道是不你需要的

代码应该有问题,不能直接使用show方法,原因是主函数是静态的,应该new一个Demo对象!
作者: qian0217wei    时间: 2015-5-6 00:16
Ray丶少年 发表于 2015-5-5 10:12

写的很好,要是有解释就更好了!
作者: qian0217wei    时间: 2015-5-6 00:17
薛慧彬 发表于 2015-5-5 10:38
学着后边的把前边的都快忘了。。。。。

我也是,现在从头开始学!
作者: Ray丶少年    时间: 2015-5-6 08:24
qian0217wei 发表于 2015-5-6 00:16
写的很好,要是有解释就更好了!

我已经在下面加了点理解的文字
作者: 痲ボㄋ.    时间: 2015-5-6 12:21
qian0217wei 发表于 2015-5-6 00:14
代码应该有问题,不能直接使用show方法,原因是主函数是静态的,应该new一个Demo对象! ...

哦哦,前面那个是我自己加的,那是我理解有误了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2