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

Java 如何在另一个类中调用抽象的内部类方法?,java,class,abstract,Java,Class,Abstract,我对以下代码有问题: public class ClassOut { abstract class ClassIn{ public void print() { System.out.println("Value: " + getValue()); } double value = 20.5; public abstract double getValue(); } } 我有另一个带有

我对以下代码有问题:

public class ClassOut {

    abstract class ClassIn{

        public void print() {
            System.out.println("Value: " + getValue());
        }

        double value = 20.5;
        public abstract double getValue();
    }
}
我有另一个带有main方法的类,我想打印抽象内部类抽象类ClassIn中的值变量


也许它适用于匿名类?

您不能对抽象类调用方法。你必须有一个从这个派生的具体类,一个实例,然后调用它。e、 g

class ConcreteClassIn extends ClassIn {
   public double getValue() {
      return 0.0;
   }
}
ConcreteClassIn cc = new ConcreteClassIn ();
cc.getValue();

我注意到你的评论。匿名类。它将与匿名类一起工作,就像上面所述,只是您没有具体类的名称,因此无法在多个位置使用该派生。要使用内部类成员变量,您必须实例化它

Outer.Inner oi = o.new Inner();
oi.member = 10;

由于不能实例化抽象类,因此必须创建一个具体类来使用它的成员

是的,它也适用于匿名类

public class Main  {

    public static void main(String[] args){
        ClassOut out = new ClassOut();
        ClassOut.ClassIn ob = out.new ClassIn() {

            @Override
            public double getValue() {
                return super.value;
            }
        };

        ob.print();
    }
}

class ClassOut{
    abstract class ClassIn{

        public void print() {

            System.out.println("Value: " + getValue());
        }

        double value = 20.5;
        public abstract double getValue();
    }
}
当ClassIn是静态的时,一个new代替co.new就足够了。
可以更好地保护值以便在子类中访问。

为什么抽象类既有值字段又有抽象获取程序?您可以创建或扩展抽象类。回答得好here@Brian ..you@AM3如果你能让一切都静下来,那就可以了!也可以称之为抽象。
- You can not call a method on an abstract class. 
- You have to have create concrete class deriving from this class.
- Create instance of that derived class and then call method. 

e.g.

class ConcreteClass extends InnerClass 
{
   public double getValue() {
      return 0.0;
   }
}

ConcreteClass cc = new ConcreteClass ();
cc.getValue();
- You can not call a method on an abstract class. 
- You have to have create concrete class deriving from this class.
- Create instance of that derived class and then call method. 

e.g.

class ConcreteClass extends InnerClass 
{
   public double getValue() {
      return 0.0;
   }
}

ConcreteClass cc = new ConcreteClass ();
cc.getValue();