ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

入れ子になったクラス

プログラミングC# p122

Javaでいうところの内部クラス。
内部クラスの内部クラスとか出来るのか試してみた。

using System;

class Test
{
        private class Inner
        {
                public class InnerInner
                {
                        public void hello()
                        {
                                Console.WriteLine("Test.Inner.InnerInner#hello")
;
                        }
                }

                public void hello()
                {
                        Console.WriteLine("Test.Inner#hello");
                }
        }

        static void Main(string[] args)
        {
                Test.Inner ti = new Test.Inner();
                ti.hello();

                Test.Inner.InnerInner tii = new Test.Inner.InnerInner();
                tii.hello();
        }
}

内部クラスの内部クラスInnerInnerは、publicじゃないとMainからアクセスできなかった。そういうもんなの?
実行した結果はこう。

Test.Inner#hello
Test.Inner.InnerInner#hello

ちなみにJava

public class InnerTest
{
        static class Inner
        {
                static class InnerInner
                {
                        static void hello()
                        {
                                System.out.println("InnerTest.Inner.InnerInner#h
ello");
                        }
                }

                public static void hello()
                {
                        System.out.println("InnerTest.Inner#hello");
                }
        }

        public static void main(String[] args)
        {
                InnerTest.Inner ti = new InnerTest.Inner();
                ti.hello();

                InnerTest.Inner.InnerInner tii = new InnerTest.Inner.InnerInner(
);
                tii.hello();
        }
}

こっちはInnerInnerがpublicじゃなくても問題なし。
内部クラスなんてあるクラスで閉じた世界なんだから、あるクラスの中からは自由にアクセスできて良い気がするのだけど、どうなのだろう。
直接のインナークラスがprivateでもアクセスできるのに、なんとなく中途半端な気がします。