A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 征服 中级黑马   /  2014-4-3 11:42  /  1512 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 征服 于 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();

}
}

4 个回复

倒序浏览
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();
        }
}
回复 使用道具 举报
/*
第一、首先你应该先明确匿名内部类和内部类的区别:
  匿名内部类格式: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方法。
  */

}
}

回复 使用道具 举报
有什么不会的在问我
回复 使用道具 举报
我也是内部类比较迷茫
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马