黑马程序员技术交流社区

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

作者: 荣天    时间: 2012-5-17 16:35
标题: 匿名内部类的问题????
1.例题
  1. interface Inter{
  2.         void method();
  3. }
  4. class Test{
  5.        根据main  补足代码   
  6. }
  7. public class WaibuDemo3{
  8.         public static void main(String a[]){
  9.                 Test.function().method();
  10.         }
  11. }
复制代码
========================
  1. interface Inter{
  2.         void method();
  3. }

  4. class Test{
  5.         static class Inner implements Inter{   
  6.                 public void method(){
  7.                         System.out.println("method  run");
  8.                 }
  9.         }

  10.         static Inter function(){
  11.                 return new Inner();        
  12.         }
  13. }


  14. public class WaibuDemo3{
  15.         public static void main(String a[]){
  16.                 Test.function().method();
  17.         }
  18. }
复制代码
匿名的做法明白了 static class Inner implements Inter{   是什么用处 ? 眩晕   赐教  谢谢!
作者: 荣天    时间: 2012-5-17 16:37
static class Inner implements Inter{    不是这句话 什么意思  而是在程序中的用处
作者: 李保成    时间: 2012-5-17 16:46
static class Inner implements Inter{    不是这句话 什么意思  而是在程序中的用处

申明一个静态的内部类Inner,该类实现了你上边所写的Inter接口中的method方法。


作者: 李保成    时间: 2012-5-17 16:52
首先分析一下整个代码。先找主函数入口public static void main(String a[]),那么它会执行下边的这个 Test.function().method() 这个方法。 那么接下来就会跳转到Test类中。因为function是静态类,静态类最大的好处就是直接可以使用类名.方法名来调用。所以会执行到return new Inner()这句话,而这句话是要创建一个新的Inner对象,那么它会执行Inner方法,说到这儿的时候基本上已经没啥难度了,静态内部类Inner实现了Inter接口,所以最后会输出method  run这句话。

不知道说的对不对,大家仅供参考,另外又不对的地方,也希望大家提醒一下。谢谢
作者: 袁冬梅    时间: 2012-5-17 16:54
斯认为,你补充的代码的问题很大,要是我我就这样补充,,,你看一下,而且, 你class Inner implements Inter是怎么理解的,我没用过,所以不懂
你看看我的代码吧,可以用匿名内部类搞定

可以运行处结果
  1. class Test{

  2.        //根据main  补足代码   
  3.          public static Inter function()
  4.         {
  5.                 return new Inter(){
  6.                         public void method()
  7.                         {
  8.                                 System.out.println("返回一个Inter接口的子类对象!");
  9.                         }
  10.                 };
  11.         }
  12. }
复制代码

作者: 逄焕玮    时间: 2012-5-17 18:50
本帖最后由 逄焕玮 于 2012-5-17 18:52 编辑

①Test.function() 类名直接调用方法,说明Test类中有一个静态方法function()

②然后Test.function() 又调用了method()方法,说明function()方法返回了一个实例对象,且该对象所属的类中有method()方法

③然后看到包含method()方法的是个接口 interface Inter,所以需要实现该接口中的method()方法

④最后以匿名内部类实现Inter接口中的method()方法就OK了

至于代码嘛,楼上冬梅美眉的就很完美,就不再赘述了{:soso_e121:}

加油{:soso_e130:}
作者: 安路凤    时间: 2012-5-17 19:01
我觉得你疑惑的是为什么要实现接口吧?
首先,主函数的 Test.function().method();
说明Test类名直接调用了方法,说明方法是个静态的,而后边又直接调用了方法,说明
function方法返回的是个类类型变量,
static class Inner implements Inter{   

07.                public void method(){

08.                        System.out.println("method  run");

09.                }

10.        }

11.

12.        static Inter function(){

13.                return new Inner();        

14.        }

内部类就考虑到了匿名内部类的情况,借用冬梅童鞋的代码,你不知道返回的类型到底是哪个类,所以就定义一个接口,采用IOC的思考方式(控制反转)直接返回接口类型的变量。
而你所定义的内部类则要实现接口以及接口里定义的方法。method则定义为接口里的抽象方法——这只是其中一个解决方案——是毕老师为了讲清楚内部类举得一个列子(不晓得自己说的对不对!有不对的请指出!{:soso_e113:})
public static Inter function()

05.        {

06.                return new Inter(){

07.                        public void method()

08.                        {

09.                                System.out.println("返回一个Inter接口的子类对象!");

10.                        }

11.                };

12.        }





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