北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

継承とprivate

以下のコードを実行してみますと。

class Super{
    public void publicMethod(){
	System.out.println("super did public");
    }
    protected void protectedMethod(){
	System.out.println("super did protected");
    }
    void defaultMethod(){
	System.out.println("super did default");
    }
    private void privateMethod(){
	System.out.println("super did private");
    }

    /* メインルーチン */
    static public void main(String[] str){
	Super s = new Sub();
	s.publicMethod();
	s.protectedMethod();
	s.defaultMethod();
	s.privateMethod();
    }

}

/* 継承 */
class Sub extends Super{
    public void publicMethod(){
	System.out.println("sub did public");
    }
    public void protectedMethod(){
	System.out.println("sub did protected");
    }
    public void defaultMethod(){
	System.out.println("sub did default");
    }
    public void privateMethod(){
	System.out.println("sub did private");
    }

}

/*
結果
sub did public
sub did protected
sub did default
super did private
*/

privateなメソッドは継承できません。


蛇足的な追記。

  • privateとabstractは同時に定義不可
  • 上記のSubクラスのメソッドをprivateで定義するのは不可(アクセス権を弱くは出来ない)