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

时间:2015-04-14 11:47:37

标签: 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();
    }
}

我有另一个带有main方法的类,我想从抽象的Inner类“abstract class ClassIn”中打印value变量。

也许它适用于匿名类?

5 个答案:

答案 0 :(得分:4)

是的,它也适用于匿名类。

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

答案 1 :(得分:3)

您无法在抽象类上调用方法。您必须有一个具体的类派生自此实例,然后调用它。 e.g。

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

我注意到你的评论。匿名课程。它将与匿名类一起工作,就像上面一样,除了你没有具体类的名字(因此匿名),所以你不能使用这个派生多个地方。

答案 2 :(得分:1)

要使用内部类成员变量,您必须实例化它

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

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

答案 3 :(得分:0)

ClassOut co = new ClassOut();
co.new ClassIn() {
    @Override
    public abstract double getValue() {
        return 42;
    }
}.print();

当ClassIn为new时,co.new代替static即可。 最好value可以在子类中访问protected

答案 4 :(得分:0)

- 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();