
【技術部】Javaの仕様を総点検!!~ ポリモーフィズム編 ~ 【試験勉強のお供に】

※カテゴリー【技術部】は技術者向けの記事となります。
※当記事はJava7をベースにしております。異なるバージョンでは挙動が違う可能性がありますのでご注意ください。
![]() |
Java の仕様について総点検しましょう。認定資格の受験勉強等にもお役立ていただけます。 |
![]() |
今回は ポリモーフィズムについてです。 |
【目的】
Java ポリモーフィズムの仕様を理解する。
※当記事はJava7をベースにしております。異なるバージョンでは挙動が違う可能性がありますのでご注意ください。
変数の参照について
public class SuperClass { public String strValue = "Super"; } public class SubClass extends SuperClass { public String strValue = "Sub"; } public static void main(String[] args) { SuperClass spCls = new SubClass(); SubClass subCls = (SubClass)spcls; System.out.println( spCls.strValue ); System.out.println( subCls.strValue ); }出力結果 Super
Sub 解説 SuperClass型で宣言された場合、strValueを直接参照するとSuperClassのstrValueを使用する。 SubClass型で宣言された場合、strValueを直接参照するとSubClassのstrValueを使用する。
親クラスにしか定義されていないメソッドの実行について
public class SuperClass { public String strValue = "Super"; public String getValue() { return strValue; } } public class SubClass extends SuperClass { public String strValue = "Sub"; } public static void main(String[] args) { SuperClass spCls = new SubClass(); SubClass subCls = (SubClass)spcls; System.out.println( spCls.getValue() ); System.out.println( subCls.getValue() ); }出力結果 Super
Super 解説 親クラスにしか定義されていないメソッドを実行した場合、親クラスが保持している変数を利用することになる。
子クラスにも定義されているメソッドの実行について
public class SuperClass { public String strValue = "Super"; public String getValue() { return strValue; } } public class SubClass extends SuperClass { public String strValue = "Sub"; public String getValue() { return strValue; } } public static void main(String[] args) { SuperClass spCls = new SubClass(); SubClass subCls = (SubClass)spcls; System.out.println( spCls.getValue() ); System.out.println( subCls.getValue() ); }出力結果 Sub
Sub 解説 子クラスにも定義されている場合は子クラスのメソッドが実行される。変数も子クラスが保持しているものを利用する。
親クラスの変数を使用すると明示した場合
public class SuperClass { public String strValue = "Super"; public String getValue() { return strValue; } } public class SubClass extends SuperClass { public String strValue = "Sub"; public String getValue() { return super.strValue; } } public static void main(String[] args) { SuperClass spCls = new SubClass(); SubClass subCls = (SubClass)spcls; System.out.println( spCls.getValue() ); System.out.println( subCls.getValue() ); }出力結果 Super
Super 解説 変数やメソッドについて、super.を指定する(12行目)ことで親クラスのものを使用する。
アクセス修飾子について
public class SuperClass { public String strValue = "Super"; public String getValue() { return strValue; } } public class SubClass extends SuperClass { protected String strValue = "Sub"; protected String getValue() { return strValue; } }出力結果 10行目でコンパイルエラー 解説 子クラスがオーバーライドするメソッドについて、親よりもアクセスレベルの低いアクセス修飾子を指定することができない。 変数についてはその限りではない。
インターフェイス型で定義された変数からメソッド実行
public interface InterfaceClass { public String getValue(); } public class SuperClass implements InterfaceClass { public String strValue = "Super"; public String getValue() { return strValue; } } public class SubClass extends SuperClass { public String strValue = "Sub"; public String getValue() { return strValue; } } public static void main(String[] args) { InterfaceClass intCls = new SubClass(); System.out.println( intCls.getValue() ); }出力結果 Sub 解説 インターフェイス型で宣言された変数からメソッドを実行してもSubClassのメソッドが実行される。 ご質問、ご意見等ありましたら下記コメントにご投稿お願いいたします。
- 関連記事
-
- 【技術部】 Pythonで東証のホームページから売残情報を抽出する 第1回 - 概要説明
- 【技術部】Javaの仕様を総点検!!~ コンストラクター編 ~ 【試験勉強のお供に】
- 【技術部】Javaの仕様を総点検!!~ ポリモーフィズム編 ~ 【試験勉強のお供に】
- 【技術部】Javaの仕様を総点検!!~ 継承、実装編 ~ 【試験勉強のお供に】
- 【技術部】Javaの仕様を総点検!!~ IF文編 ~ 【試験勉強のお供に】
- この記事へのリアクション
コメントの投稿
タグ:技術部Javaポリモーフィズム認定資格