让我们假设我有课: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; } }我尝试从匿名类调用新定义的方法,但它不会让我实例化 A 类。我也不想使用反射。我很简单,不想定义嵌套类只是为了覆盖一个属性。问题的根源是Spring-integration ImapMailReceiver,我想覆盖任务调度程序。像下面这样: final ImapMailReceiver imapMailReceiver = new ImapMailReceiver() { super.setTaskScheduler(MYTASKSCHEDULERHERE); }
2 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
您new A() { ... }仍然只是定义一个新类。因此,你不能简单地把大括号,只有字段,方法和嵌套类型声明之间的任何语句可以去那里,但是构造器是不是允许。您可以改为添加实例初始化程序:
A extendedClass = new A() {
{
x = 5;
}
}
紫衣仙女
TA贡献1839条经验 获得超15个赞
为什么要使用嵌套或匿名内部类?我们可以覆盖并访问覆盖的变量,如下所示。
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
}
添加回答
举报
0/150
提交
取消