【问题标题】:Why does the line inside method of argument defined method anonymous inner class work?为什么参数定义方法匿名内部类的内部方法行工作?
【发布时间】:2016-05-20 05:14:18
【问题描述】:

InterfaceInAbstractClass.java

public abstract class InterfaceInAbstractClass {

    public interface Inter{

        void interface_method();

    }

    public  void interface_abstract_class_method(Inter in){

    }

}

InterfaceInAbstractClassImplementer.java

public class InterfaceInAbstractClassImplementer extends InterfaceInAbstractClass{

    public static void main(String[] args){

//      InterfaceInAbstractClass.Inter abcd = new InterfaceInAbstractClass.Inter() {
//          
//          @Override
//          public void interface_method() {
//              // TODO Auto-generated method stub
//              System.out.println("An interface can be implemented ");
//          }
//      };
        System.out.println("An interface can be implemented ");
        InterfaceInAbstractClassImplementer abc = new InterfaceInAbstractClassImplementer();
        abc.interface_abstract_class_method(new Inter() {

            @Override
            public void interface_method() {
                // TODO Auto-generated method stub
                System.out.println("An interface can be implemented within a class");
            }
        });     
    }
}

为什么System.out.println("一个接口可以在一个类中实现");没有打印出来?

【问题讨论】:

  • 乍一看,你永远不会调用它。
  • 因为没有被调用
  • 你需要调用那个方法。现在你只是在定义方法,而不是从任何地方调用它。

标签: java inner-classes anonymous-class anonymous-methods anonymous-inner-class


【解决方案1】:

对您的实现类进行小调整以调用接口函数

public class InterfaceInAbstractClassImplementer extends InterfaceInAbstractClass{

    public static void main(String[] args){

        System.out.println("An interface can be implemented ");
        InterfaceInAbstractClassImplementer abc = new InterfaceInAbstractClassImplementer();
        Inter inter = new Inter() {

            @Override
            public void interface_method() {
                // TODO Auto-generated method stub
                System.out.println("An interface can be implemented within a class");
            }
        };
        abc.interface_abstract_class_method(inter);
    }

    public void interface_abstract_class_method(Inter inter) {
        inter.interface_method();
    }
}

输出:

An interface can be implemented
An interface can be implemented within a class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多