abstract class AbsDemo{
abstract void show();
}
class Outer2{
int x = 3;
class Inner1 extends AbsDemo{
int inner = 1;
void show(){
System.out.println("show( Inner )");
}
void getInner(){
System.out.println(inner);
}
}
public void function(){
Inner1 in1 = new Inner1();
in1.show();
in1.getInner(); /* new AbsDemo(){ //若是采用匿名类
int inner = 1;
void show(){
System.out.println("show( inner )");
}
void getInner(){
System.out.println(inner);
}
}.show(); */ //怎么用一个父类对象访问 show() 和 getInner()方法 ? }
}
public class InnerClass3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer2 out = new Outer2();
out.function();
}}

解决方案 »

  1.   

    这样访问匿名内部类的方法interface pr {
    void print1();
    }public class Test4 {
    public pr dest() {
    return new pr() {
    public void print1() {
    System.out.println("Hello world!!");
    }
    };
    } public static void main(String args[]) {
    Test4 c = new Test4();
    pr hw = c.dest();
    hw.print1();
    }
    }
      

  2.   

    父类中没有getInner()方法,匿名好像没法访问getInner()。
      

  3.   

    这样访问print1 是因为接口中有抽象方法,你内部类中要是有个print2(), hw 还是不能访问啊...
      

  4.   

    也不是吧....new AbsDemo(){ 
                int inner = 1;
                void show(){
                    System.out.println("show( inner )");
                }
                void getInner(){
                    System.out.println(inner);
                }
            }.getInner();//输出 1
      

  5.   

    这样访问print1 是因为接口中有抽象方法,你内部类中要是有个print2(), hw 还是不能访问啊...

    如果写入了接口中未定义的方法,这本身就是不合法的,如果在eclipse下面的话会提示警告。
    你想一下匿名内部类的作用是什么?
    如果你真的去调用匿名内部类中的非定义方法的话,那匿名内部类的作用也就失去了。
      

  6.   

    这样访问print1 是因为接口中有抽象方法,你内部类中要是有个print2(), hw 还是不能访问啊...

    如果写入了接口中未定义的方法,这本身就是不合法的,如果在eclipse下面的话会提示警告。
    你想一下匿名内部类的作用是什么?
    如果你真的去调用匿名内部类中的非定义方法的话,那匿名内部类的作用也就失去了。
    哦,知道了,看来匿名内部类只能做好分内的事了...