デザイナーが始めるプログラミング

グラフィックデザインを経験後、プログラマーへと転身すべく日々の勉強を書き綴った奮闘日記

staticメソッドをオーバーライドすると。。。

またまた基本的な事をメモ。。

下記の様にスーパークラス型でサブクラスをインスタンスすると

オーバーライドしたメソッドはサブクラスメソッドが呼び出されます。

Animals animals = new Cow;

animals.Say(); //サブクラスのメッソッド呼び出し

 

しかしSayメソッドがstatic宣言されていた場合には最初にスーパークラス型で

宣言しているためスーパークラスのstaticメソッドが呼び出されます。

 

class Animals {

 public static void Say() { //static宣言

 System.out.println("Animal");

 }

}

class Cow extends Animals {

 public static void Say() { //static宣言をオーバーライド

 System.out.println("Cow");

 }

}

public class Test05 {

 public static void main(String args) {

  Animals[] animals = { new Animals(), new Cow() };

  for (Animals a : animals) {

  a.Say();

  }

 new Cow().Say(); //サブクラス型で呼び出すとサブクラスのstaticメソッドが呼び出されます。

}

実行結果

Animal

Animal

Cow

 

レッツ覚え書き。