

Java で以下のようなことは可能でしょうか。

[code]

    abstract class A<T extends B> {
      T baz;
    
      A() {}
    
      String getFoo() {
        return this.baz.b1;
      }
    
      class B {
        String b1;
        B() {
          this.b1 = "bar";
        }
      }
    }
    
    class A' extends A<B'> {
      A'() {
        this.baz = new B'();
      }
    
      String getBar() {
        return this.baz.b2;
      }
    
      class B' extends B {
        String b2;
        B'() {
          super();
          this.b2 = "bar";
        }
      }
    }
    
    class Main {
      public static void main(String[] args) {
        A' a = new A'();
        System.out.println(a.getFoo() + a.getBar()); // out "foobar"
      }
    }
    
[/code]

また、クラス B のメソッドをクラス B' でオーバーライドすることは可能でしょうか。


CC BY-SA 3.0
2015-01-19T01:40:37.203
4805
2015-01-19T09:57:27.000
2015-01-19T02:58:55.497
46
3132
question
java
Java で内部クラスのメソッドをオーバーライドしたい


コードの意図はあまり読めていませんが、コンパイルは以下で通ります

Javaのクラスの使用  
<http://www.ne.jp/asahi/hishidama/home/tech/java/class_use.html>

[code]

    abstract class A<T extends A.B> {
      T baz;
    
      A() {}
    
      String getFoo() {
        return this.baz.b1;
      }
    
      class B {
        String b1;
        B() {
          this.b1 = "bar";
        }
      }
    }
    
    class Adash extends A<Adash.Bdash> {
    
      Adash() {
        this.baz = new Bdash();
      }
    
      String getBar() {
        return this.baz.b2;
      }
    
      class Bdash extends A.B {
        String b2;
        Bdash() {
          super();
          this.b2 = "bar";
        }
      }
    }
    
    /**
     * ここから実行
     */
    public class prog {
        public static void main(String[] args) {
            Adash a = new Adash();
            System.out.println(a.getFoo() + a.getBar()); // out "foobar"
        }
    }
    
[/code]

[wandboxでのライブデモ](http://melpon.org/wandbox/permlink/sPhriQmqAJTqN5oR)


CC BY-SA 3.0
2015-01-19T02:14:09.650
4807
2015-01-19T09:57:27.000
2015-01-19T09:57:27.000
5044
4715
4805
answer


可能ですが、サンプルコードは、`A`クラスの宣言部で既にエラーが起こっていますよ。

Aの宣言時に内部クラスが見つからないのでエラーになります。（Aクラスの定義行自体は`A`クラスの内部にない＝Bクラスがスコープ外)

[code]

    class A<T extends B> { // B にアクセスできない
        class B {}
    }
    
[/code]

以下だと大丈夫。

[code]

    class A<T extends A.B> {
        class B {}
    }
    
[/code]


CC BY-SA 3.0
2015-01-19T04:02:18.883
4817
2015-01-19T04:02:18.883
4978
4805
answer