假设我有课:
class A {
protected int x; // no public getter, setter
}
现在,我想扩展类A,以覆盖'x'变量。答案将是:
public class SomeClass {
someMethod() {
A extendedClass = new MyExtension(5);
}
class MyExtension extends A {
public MyExtension(int x) {
super.x = x;
}
}
}
我的问题是:是否有可能在不单独定义嵌套类的情况下做到这一点?我的意思是这样的
someMethod() {
A extendedClass = new A() {
// here do something like super.x = 5;
}
}
我尝试使用Calling newly defined method from anonymous class,但是它不允许我实例化A类。我也不想使用反射。
我简单,不想定义嵌套类只是为了覆盖一个属性。问题的根源是Spring集成ImapMailReceiver,我想在其中覆盖任务计划程序。如下所示:
final ImapMailReceiver imapMailReceiver = new ImapMailReceiver() {
super.setTaskScheduler(MYTASKSCHEDULERHERE);
}
答案 0 :(得分:2)
您的new A() { ... }
仍在定义一个新类。因此,您不能简单地将任何语句放在大括号之间,只能将字段,方法和嵌套类型声明放在此处,但不允许使用 构造函数。您可以改为添加实例初始化器:
A extendedClass = new A() {
{
x = 5;
}
}
答案 1 :(得分:0)
为什么要使用嵌套或匿名内部类? 我们可以进行覆盖并按如下所示访问覆盖的变量。
public class SomeClass extends A{
int val;
void someMethod(int val) {
super.x = val;
}
public static void main(String[] args) {
SomeClass sc = new SomeClass();
System.out.println(sc.x); // output=10
sc.someMethod(20);
System.out.println(sc.x); // output=20
}
}
class A {
protected int x = 10; // no public getter, setter
}