public class Outer {

Outer()
{
//System.out.print("我要");
}
 void method()
  {
      System.out.print("吃");
  }}
public class Test { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
      
Outer a=new Outer(){
  void method()
  {
      System.out.print("饭");
  }
   };
   new Outer().method();
    a.method();
}}

解决方案 »

  1.   

    看了一下,我想问,a是生成了一个子类重写了Outer的方法吗?因为后面new Outer().method();方法还是原来的方法。
      

  2.   

    个人理解,仅供参考
    package com.mystudy.test2;class Outer {
    Outer() {
    // System.out.print("我要");
    }
    void method() {
    System.out.print("---吃");
    }
    }
    public class Test {
    public static void main(String[] args) {

    Outer a = new Outer() {//我的理解是这儿新建了一个匿名内部类,提供了method的方法
    void method() {
    System.out.print(">?>饭");
    }
    };
    new Outer().method();//执行---吃",建立了一个Outer的对象
    a.method();//执行>?>饭
    }}
      

  3.   

    创建Outer对象a的时候把Outer的method方法重写了,new Outer()是没有重写method方法的新对象。
      

  4.   

    这儿首先 在写代码时,一个类里面只有一个public 类,并且这个类要包含main()方法,
    所以你的Outer类 不要用public关键字修饰; 这个类是两个独立的类,不存在匿名类,或者内部类这一说,因为这两个是单独存在的,各自实现自己的方法,只不过通过主方法类的实例化,调用这些定义的方法,具体调用过程如下所示:class Outer {Outer()
    {
    System.out.print("我要");
    }
    void method()
    {
    System.out.print("吃");
    }}
    public class Test9 {/**
    * @param args
    */
    public static void main(String[] args) 
    {
    // TODO Auto-generated method stub //实例化的过程,会调用这个类无参的构造方法,输出“我要”
    Outer a=new Outer() 
    {                
    void method()
    {
    System.out.print("饭");
    }
    };
    //这儿 new Outer()实例化生成一个对象,继续调用Outer的     无             
            //  参   构造方法,继续输出 “我要”,并且这个对象调用了Outer类的
                   //    method()的方法,输出“吃”;new Outer().method(); 
     
    //通过Outer 类型的引用变量a调用了public类的method()的方法,输                  // 出"饭"                       
    a.method();    
    }}