黑马程序员技术交流社区

标题: 求解匿名内部类问题。。见2个问号处 [打印本页]

作者: Stevenj    时间: 2014-7-7 08:36
标题: 求解匿名内部类问题。。见2个问号处
//-------------------------------------------------110 匿名内部类_练习题
interface Inter {
        void method();
}

class Test {
        //补足代码,通过匿名内部类
        /*
        static class Inner implements Inter {        //??????????????
                public voic method() {
                        System.out.println("method run");
                }
        }
        */
       
        static Inter function() {
                //return new Inner();
                return new Inter() {                //不用再写 static 了吗????????????
                        public void method() {
                                System.out.println("method run");
                        }
                };
        }
}

class M {
        public static void main(String[] args) {
                Test.function().method();//849function()直接被类名调用,所以它一定是静态的。
        }
}


作者: 吴俊勇    时间: 2014-7-7 09:16
看不懂,不知道你的代码补了没有
作者: ddewym123    时间: 2014-7-7 13:08
LZ,我去翻了内部类的视频,发现第一个?处的代码是多余的。练习要求补足的代码是第二个?处的代码。
如果是关于第二个?的代码为什么这么写,我认为:
Test.function().method();可知,Test类中有一个function()方法,且因为是直接调用,所以是静态的。然后因为它又继续调用method()方法,而method方法是接口inter的一个方法。所以function方法一定返回一个Inter的子类对象,并复写了method方法。由此需要用到匿名内部类。new匿名类时不能加static修饰符(虽然该匿名类其实是静态的)。
当然也可以不用匿名内部类,
那补足的代码为:
  1. static class Inner implements Inter {        
  2.     public void method() {
  3.         System.out.println("method run");
  4.     }
  5.         }
  6.         static Inter function(){
  7.             return new Inner();
  8.         }
复制代码




作者: ╭月牙湾湾╮    时间: 2014-7-8 01:11
学习了  
作者: 引子    时间: 2014-7-8 22:44
你第一个问号处
如果你定义了一个静态内部类 那么你就不必再在function()中定义匿名内部类,可以这样写
static Inner function(){
       return new Inner();
}

第二个问号处:  你既然定义了匿名内部类,如果你写static  你想写在哪?  定义匿名内部类时再复写Inter中的方法就可以创建一个子类对象,具有function()方法并可以调用function();方法
作者: lc2015    时间: 2014-7-10 09:35
看不懂!




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