内部クラス(public) に在るインスタンスメソッドを使う方法

$SOME_DIR/src/Main.java

  1 import myutil.ExternalClass;
  2 
  3 public class Main {
  4   public static void main(String... args) {
  5     ExternalClass externalClass     = new ExternalClass();
  6     ExternalClass.SubClass subClass = externalClass.new SubClass();
  7     externalClass.hello();
  8     subClass.hello();
  9   }
 10 }

$SOME_DIR/src/myutil/ExternalClass.java

  1 package myutil;
  2 
  3 public class ExternalClass {                                                
  4   public ExternalClass() {}
  5   public void hello() {
  6     System.out.println("origin hello");                                     
  7   }
  8   
  9   public class SubClass {                                                   
 10     public SubClass() {}
 11     
 12     public void hello() {
 13       System.out.println("sub hello");                                      
 14     }                                                                       
 15   }
 16 }

command

$ cd $SOME_DIR/src
$ javac Main.java
$ java Main
origin hello
sub hello

参考記事

docs.oracle.com


独り言

(何のために「内部」クラスを public にするか...)

(package で適切に名前空間を分割する or 内部クラスを private にカプセルした方がいいんじゃない?)

(デインパターン勉強し直さないと)