如何在另一个 class 中调用抽象内部 class 方法?
How to call abstract Inner class methods, in another class?
我对以下代码有疑问:
public class ClassOut {
abstract class ClassIn{
public void print() {
System.out.println("Value: " + getValue());
}
double value = 20.5;
public abstract double getValue();
}
}
我有另一个 class 的 main 方法,我想从抽象内部打印值变量 class "abstract class ClassIn
".
也许它可以与匿名 class 一起使用?
您不能在抽象 class 上调用方法。你必须有一个 concrete class 派生自这个,那个的一个实例,然后调用那个。例如
class ConcreteClassIn extends ClassIn {
public double getValue() {
return 0.0;
}
}
ConcreteClassIn cc = new ConcreteClassIn ();
cc.getValue();
我注意到你的评论。匿名 classes。它将与匿名 classes 一起工作,就像上面一样,除了你没有具体的 class 的名称(因此 anonymous)等等您不能在多个地方使用该推导。
要使用内部 class 成员变量,您必须实例化它
Outer.Inner oi = o.new Inner();
oi.member = 10;
并且由于您无法实例化抽象 class,因此您必须创建具体 class 才能使用它的成员。
是的,它也适用于匿名 class。
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();
}
}
ClassOut co = new ClassOut();
co.new ClassIn() {
@Override
public abstract double getValue() {
return 42;
}
}.print();
当 ClassIn 为 static
时,A new
而不是 co.new
就足够了。
value
最好是 protected
以便子 class 可以访问。
- 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();
我对以下代码有疑问:
public class ClassOut {
abstract class ClassIn{
public void print() {
System.out.println("Value: " + getValue());
}
double value = 20.5;
public abstract double getValue();
}
}
我有另一个 class 的 main 方法,我想从抽象内部打印值变量 class "abstract class ClassIn
".
也许它可以与匿名 class 一起使用?
您不能在抽象 class 上调用方法。你必须有一个 concrete class 派生自这个,那个的一个实例,然后调用那个。例如
class ConcreteClassIn extends ClassIn {
public double getValue() {
return 0.0;
}
}
ConcreteClassIn cc = new ConcreteClassIn ();
cc.getValue();
我注意到你的评论。匿名 classes。它将与匿名 classes 一起工作,就像上面一样,除了你没有具体的 class 的名称(因此 anonymous)等等您不能在多个地方使用该推导。
要使用内部 class 成员变量,您必须实例化它
Outer.Inner oi = o.new Inner();
oi.member = 10;
并且由于您无法实例化抽象 class,因此您必须创建具体 class 才能使用它的成员。
是的,它也适用于匿名 class。
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();
}
}
ClassOut co = new ClassOut();
co.new ClassIn() {
@Override
public abstract double getValue() {
return 42;
}
}.print();
当 ClassIn 为 static
时,A new
而不是 co.new
就足够了。
value
最好是 protected
以便子 class 可以访问。
- 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();