【问题标题】:How to call a method of an abstract inner class from another class?如何从另一个类调用抽象内部类的方法?
【发布时间】:2014-07-06 16:17:19
【问题描述】:
public class OuterClass {
     abstract class InnerClass {
         int value = 20;
         public void print(){
                 System.put.println("Value = " + getValue());
         }
         public abstract int getValue();
      }
 }

谁能帮助我,我如何从另一个具有 main 方法的 Java 类调用方法 print()?

【问题讨论】:

  • 不能调用抽象类的方法,除非它是静态的
  • 请求Outer类实例创建这个抽象内部类的具体实例并返回,然后调用返回对象的方法。

标签: java class abstract inner-classes


【解决方案1】:

由于InnerClassnon static,您需要OuterClass 的实例才能访问它。接下来,由于它是抽象类,因此您需要一个可以实际创建其实例的子类。从子类中,您可以使用 super 调用超类方法。

我能想到的一种方法是

public class HelloWorld {


    public static void main(String args[]) {

        OuterClass outerClass = new OuterClass();
        InnerSubClass myInstance = outerClass.new InnerSubClass();
        myInstance.print();
    }
}

class OuterClass {

    private InnerSubClass myInstance;

    abstract class InnerClass {
        int value = 20;
        public void print(){
                System.out.println("Value = " + getValue());
        }
        public abstract int getValue();
     }

    class InnerSubClass extends InnerClass{

        @Override
        public void print(){
            super.print();
            System.out.println("In SUbclass");
        }

        @Override
        public int getValue() {
            return 0;
        }

    }
}

【讨论】:

    【解决方案2】:

    您不能实例化抽象类,因此要调用该类的实例方法,您需要对其进行子类化。

    为了继承它,你需要实现它的抽象方法。

    new OuterClass().new InnerClass()
    {
       public int getValue()
       {
          return 1;
       }
    }.print();
    

    这是一种方法,尽管在实践中您可能希望以不同的方式执行此操作,但一种方法是 JBNizet 建议在 OuterClass 中有一个方法来返回您想要的 InnerClass 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      相关资源
      最近更新 更多