简体   繁体   English

如何从另一个类调用抽象内部类的方法?

[英]How to call a method of an abstract inner class from another class?

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

Can someone help me, how do I call the method print() from another Java class that has the main method? 有人可以帮助我,如何从另一个具有main方法的Java类中调用方法print()?

You can't instantiate an abstract class, so to call an instance method of that class you need to subclass it. 您无法实例化一个抽象类,因此要调用该类的实例方法,您需要对其进行子类化。

In order to subclass it you need to implement its abstract methods. 为了对其进行子类化,您需要实现其抽象方法。

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

Is one way to do it, although in practice you would probably want to do this differently, one way would be as JBNizet suggests to have a method in OuterClass to return the type of InnerClass that you want. 要做到这一点,但在实践中,你可能会想这样做不同的,一个办法是为JBNizet建议对有方法的一种方式OuterClass返回的类型InnerClass你想要的。

Since InnerClass is non static you need an instance of OuterClass to access it. 由于InnerClass就是non static ,你需要的一个实例OuterClass访问它。 Next since it is abstract class you need a subclass whose instance you can actually create. 接下来,由于它是抽象类,因此需要一个可以实际创建其实例的子类。 From the subclass you can call the super classes method using super. 从子类中,您可以使用super调用超类方法。

One way I can think of is 我能想到的一种方法是

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;
        }

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM