黑马程序员技术交流社区

标题: 有关接口和匿名内部类的问题 [打印本页]

作者: 征服    时间: 2014-4-3 11:42
标题: 有关接口和匿名内部类的问题
本帖最后由 征服 于 2014-4-4 17:10 编辑

/*
我这是一个将匿名内部类和接口连接在一起的一个小程序,在主函数内部定义了一个匿名内部类,返回一个继承了一个接口的对象,
子类复写了接口中的方法,最终我要运行method。可是怎么调整都会出错,看着有点乱,请帮助我修改一下,并说明一下,谢谢!!
!!!!
*/
interface Iner
{
void method
}
class Inner implements Iner
{
public void method()
{
  System.out.println("method run");
}
}
class InnerClassTest
{
public static void main(String[] args)
{
  
  new Test()
  {
   public  Iner function()
   {
    return new Inner();
   }
  }.method();

}
}


作者: 黄泉    时间: 2014-4-3 12:01
interface Iner
{
        void method//method的括号和结束符号呢?
}
class Inner implements Iner
{
        public void method()
        {
                System.out.println("method run");
        }
}
class InnerClassTest
{
        public static void main(String[] args)
        {
                  //你这个类我实在是找不出它是谁的接口或者子类
                  new Test()//想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口
                  {
                           public  Iner function()
                           {
                                        return new Inner();//返回的什么啊?还不如给Inner中的method加一个 static 直接调用
                           }
                  }.method();
        }
}

优化后的代码:

interface Iner
{
        void method();
}
/*
class Inner implements Iner    这就不要了
{
        public void method()
        {
          System.out.println("method run");
        }
}
*/
class Demo1
{
        public static void main(String[] args)
        {
                  
                  new Inner()
                  {
                           public  void method()
                           {
                                        System.out.println("method run");
                           }
                  }.method();
        }
}
作者: 梦幻    时间: 2014-4-3 12:02
/*
第一、首先你应该先明确匿名内部类和内部类的区别:
  匿名内部类格式:new 父类或者接口(){定义子类的内容}
  匿名内部了顾名思义就是我们在写的时候不用再定义一个类
  因此也就没有新的类名。
第二、接口中的方法都是抽象类型的,抽象类型不用写{},但是一定要有();
  这个是不能少的,不是说全部都要省略。
第三、你的匿名内部类虽然说已经定义了,但是运行时并没有调用function函数
  也就没有创建Inner对象,当然method方法也就不能运行了

下面是我给你修改的,希望对你起到帮助!!
*/

interface Iner
{
void method(); //抽象方法不用写{},但是()和;不能省
}
class Inner implements Iner
{
public void method()
{
  System.out.println("method run");
}
}
class InnerClassTest
{
public static void main(String[] args)
{
  
  new InnerClassTest()  //注意:内部类不需要定义新的类名,只需父类即可
  {
   public  Iner function()
   {
    return new Inner();
   }
  }.function().method();
/*匿名内部类建立后要先运行其中的function方法后,才能建立Inner对象
  也才能运行method方法。
  */

}
}


作者: 梦幻    时间: 2014-4-7 07:10
有什么不会的在问我
作者: 心灰意冷    时间: 2014-4-8 19:28
我也是内部类比较迷茫




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