Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

スーパークラスとは

「スーバークラス」とは、継承関係にあるクラスの継承元のクラスのことを指します。また、継承先の子クラスのことは「サブクラス」と呼びます。

Java ではクラスの継承をするとき、クラス名の横に extends スーバークラス名 で指定します。

具体的な例を見てみましょう。

次のサンプルコードは3つのクラスの内「クラスB」は「クラスA」を継承し、「クラスC」は「クラスB」を継承する例です。

class ClassA {
  ClassA () {
    System.out.println("ClassAです");
  }
}

class ClassB extends ClassA {
  ClassB () {
    System.out.println("Classす");
  }
}

class ClassC extends ClassB {
  ClassC () {
    System.out.println("ClassCです");
  }
}

上の例のとき「クラスB」からすると「クラスA」がスーパークラスとなり、「クラスC」からすると、「クラスB」と「クラスA」がスーパークラスになります。

このように、スーパークラスと呼ばれるのは、継承階層上で上位のクラスになっているクラスのことを指します。

super キーワード

スーパークラスを継承したサブクラスでは、親のクラスのメソッドやフィールド変数などに super キーワードを使ってアクセスできます。

通常、別のクラスのメソッドや変数にアクセスする場合は、そのオブジェクトのスコープを public にしないとアクセスできませんが、継承関係にあるクラスの場合は、 protected および public スコープのオブジェクトにサブクラスからアクセスすることが可能です。

// スーパークラス
class ClassA {
  ClassA () {
  }

  public int field1;
  protected int field2;
  private int field3;

  public void sampleMethod1 () {
      System.out.println("sampleMethod1");
  }

  protected void sampleMethod2 () {
    System.out.println("sampleMethod2");
  }

  private void sampleMethod3 () {
    System.out.println("sampleMethod3");
  }
}

// サブクラス
class ClassB extends ClassA {
  ClassB () {
  }

  public void run() {
    super.sampleMethod1();
    super.sampleMethod2();
    //super.sampleMethod3();  ← スーパークラスの private メソッドは参照できない
    System.out.println("field1=" + String.valueOf(super.field1));
    System.out.println("field2=" + String.valueOf(super.field2));
    //↓スーパークラスの private フィールドは参照できない
    //System.out.println("field3=" + String.valueOf(super.field3));
  }
}

スーパークラスのコンストラクタ呼び出し

サブクラスを new でインスタンスを生成するとき、自動でスーパークラスのコンストラクタが呼び出されます。

class ClassA {
  ClassA () {
    System.out.println("ClassAのコンストラクタ");
  }
}

class ClassB extends ClassA {
  ClassB () {
    System.out.println("ClassBのコンストラクタ");
  }
}

class Main {
  public static void main(String[] args) throws Exception {
    ClassB classB = new ClassB();
  }
}

▪️実行結果

ClassAのコンストラクタ
ClassBのコンストラクタ

また、スーパークラスにコンストラクタが複数存在する場合は、引数なしのデフォルトコンストラクタが呼ばれます。

class ClassA {
  ClassA () {
    System.out.println("ClassAのコンストラクタ(引数なし)");
  }
  ClassA (String args) {
    System.out.println("ClassAのコンストラクタ(引数あり)");
  }
}

class ClassB extends ClassA {
  ClassB () {
    System.out.println("ClassBのコンストラクタ");
  }
}

class Main {
  public static void main(String[] args) throws Exception {
    ClassB classB = new ClassB();
  }
}

▪️実行結果

ClassAのコンストラクタ(引数なし)
ClassBのコンストラクタ

スーパークラスに引数なしのコンストラクタが存在しない時は、サブクラスで明示的にスーパークラスのコンストラクタの呼び出しを指定しないと、コンパイルエラーになります。

class ClassA {
  ClassA (String args) {
    System.out.println("ClassAのコンストラクタ(引数あり)");
  }
}

class ClassB extends ClassA {
  ClassB () {
    System.out.println("ClassBのコンストラクタ");
  }
}

class Main {
  public static void main(String[] args) throws Exception {
    ClassB classB = new ClassB();
  }
}

上のコードの場合、次のコンパイルエラーが発生する。

error: constructor ClassA in class ClassA cannot be applied to given types;

こういったケースでは、サブクラスのコンストラクタで明示的にスーパークラスのコンストラクタを呼び出します。

class ClassB extends ClassA {
  ClassB () {
    super(“sample”);  //スーパークラスのコンストラクタを呼び出し
    System.out.println("ClassBのコンストラクタ");
  }
}
ポテパンダの一言メモ

スーパークラスのコンストラクタは継承できません。これは、サブクラスのインスタンスからスーパークラスのコンストラクタが呼び出せてしまうと、サブクラスのコンストラクタが呼ばれず、初期化されない可能性があるため禁止されています。

まとめ

Java のスーパークラスについての解説と、スーパークラスとサブクラスのコントラクタの呼び出し関係について解説してきました。

Java はオブジェクト指向言語であり、クラスの継承は Java の開発者として必須の知識です。クラスの継承をマスターして Java 開発者としてステップアップしましょう。

【関連記事】
【Java】継承でメソッドを有効活用!オーバーライドについての解説

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。