How to override/extend an inner class from a subclass?

后端 未结 3 1666
清歌不尽
清歌不尽 2021-02-03 19:44

I want to change how a method of a class executes without overriding the method, and only overriding (or ideally extending) the inner class. Assume that I cannot change the fact

3条回答
  •  北恋
    北恋 (楼主)
    2021-02-03 19:47

    It's not possible by only changing value2. The problem is that 'new' calls aren't dispatched dynamically - the 'new' in toString will always create A::Thing. You could fix this creating a factory : something like this:

    public class A {
      static class Thing {
        public int value() { return 10+value2(); }
        public int value2() { return 10; }
      }
    
      private Thing makeThing() { return new Thing(); }
    
    
      public String toString() {
        Thing t = new Thing();
        return Integer.toString(t.value());
      }
    }
    
    public class B extends A {
      static class Thing extends A.Thing {
        public int value2() { return 20; }
      }
    
      private Thing makeThing() { return new Thing(); }
    
    }
    

提交回复
热议问题