我遇到以下代码的问题:
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变量。
也许它适用于匿名类?
答案 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();