具有定义的匿名类实例化 - 覆盖受保护的方法

让我们假设我有课:


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

    }


翻翻过去那场雪
浏览 167回答 2
2回答

慕神8447489

您new A() { ... }仍然只是定义一个新类。因此,你不能简单地把大括号,只有字段,方法和嵌套类型声明之间的任何语句可以去那里,但是构造器是不是允许。您可以改为添加实例初始化程序:A extendedClass = new A() {  {    x = 5;  }}

紫衣仙女

为什么要使用嵌套或匿名内部类?我们可以覆盖并访问覆盖的变量,如下所示。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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java