|
|
継承とは:SJC-P(310-035)対策Java用語集
|
Java認定資格(SJC-P/310-035)を一発合格したい! このサイトは、そんなあなたを本気で応援します!! SJC-P(310-035)対策のメルマガ問題集も好評発刊中。 ぜひあなたの受験に役立ててください。 メールマガジンの購読はもちろん無料です! 登録はこちらから→SJC-P対策メルマガ問題集 |
Java用語集:継承
|
| スーパークラス | サブクラス | |
| Shogun | →継承→ | Tokugawa |
ところで、なぜ継承という考え方が導入されたのでしょうか。
簡単に言ってしまうと便利だからです。
特に次のようなメリットがあります。
- 継承を行うことで、既存の記述が再利用できる。
その結果、コードの記述が簡略化される。 - 共通した性質をスーパークラスにまとめることができる。
その結果、クラスを共通の性質をもつグループに分けて管理することができる。
コード2、
コード3
の例で言えば、クラス Tokugawa では何も宣言していないのに、スーパークラス Shogun で宣言した
メンバを継承して利用できました。
つまり、継承を行うことで既にあるコードを記述する手続きが簡略化されたわけですね。
具体的にいうならば、Tokugawa クラスは post と getPost() を記述する手間を省くことができるのです。
さらに必要であればサブクラスで記述を追加することができます。
次のコードを見てください。
//コード4 class Test{ public static void main( String argv[] ){ Tokugawa tokugawa = new Tokugawa(); System.out.println("tokugawaの役職は" + tokugawa.getPost() ); System.out.println("tokugawaの姓は" + tokugawa.getLastName() ); } } class Shogun{ String post = "征夷大将軍"; public String getPost(){ return( post ); } } class Tokugawa extends Shogun{ String lastName = "徳川"; public String getLastName(){ return( lastName ); } }
スーパークラスから継承したメンバに加えて、自分でさらにメンバを追加しています。
実行して確認してみましょう。
>javac Test.java >java Test tokugawaの役職は征夷大将軍 tokugawaの姓は徳川
また継承は自分の直接のスーパークラスだけではなく、スーパークラスのスーパークラスのメンバも引き継ぎます。
さらに、スーパークラスのスーパークラスのスーパークラスのスーパークラスの・・・スーパークラスのメンバも引き継ぎます。
つまり先祖代々の資産がすべて引き継がれるのです。
どういうことが分かりにくいと思うので、コードを使って実際に確認してみましょう。
//コード5 class Test{ public static void main( String argv[] ){ Ieyasu ieyasu = new Ieyasu(); System.out.println("ieyasuの役職は" + ieyasu.getPost() ); System.out.println("ieyasuの姓は" + ieyasu.getLastName() ); System.out.println("ieyasuの名は" + ieyasu.getFirstName() ); System.out.println("ieyasuの姓名は" + ieyasu.getFullName() ); } } class Shogun{ String post = "征夷大将軍"; public String getPost(){ return( post ); } } class Tokugawa extends Shogun{ String lastName = "徳川"; public String getLastName(){ return( lastName ); } } class Ieyasu extends Tokugawa{ String firstName = "家康"; public String getFirstName(){ return( firstName ); } public String getFullName() { return( lastName + firstName ); } }
>javac Test.java >java Test ieyasuの役職は征夷大将軍 ieyasuの姓は徳川 ieyasuの名は家康 ieyasuの姓名は徳川家康
Shogun -> Tokugawa -> Ieyasu とメンバが継承されている様子が分かるかと思います。
そのため Ieyasu では getLastName() も getPost() も宣言していないのに利用することができます。
このように継承を行うことで、サブクラスの記述を簡略化できるというのが継承のメリットの一つなのです。
では、もう一つのメリットである共通した性質をスーパークラスにまとめる、というのはどういうことでしょうか。
言葉で説明するよりコードの方が分かりやすいと思うので、まずは以下のコードを見てください。
//コード6 class Test{ public static void main( String argv[] ){ Ieyasu ieyasu = new Ieyasu(); Hidetada hidetada = new Hidetada(); Iemitsu iemitsu = new Iemitsu(); System.out.println("ieyasuの役職は" + ieyasu.getPost() ); System.out.println("ieyasuの姓は" + ieyasu.getLastName() ); System.out.println("hidetadaの役職は" + hidetada.getPost() ); System.out.println("hidetadaの姓は" + hidetada.getLastName() ); System.out.println("iemitsuの役職は" + iemitsu.getPost() ); System.out.println("iemitsuの姓は" + iemitsu.getLastName() ); } } class Shogun{ String post = "征夷大将軍"; public String getPost(){ return( post ); } } class Tokugawa extends Shogun{ String lastName = "徳川"; public String getLastName(){ return( lastName ); } } class Ieyasu extends Tokugawa{ /*特化した内容はここで宣言する*/ } class Hidetada extends Tokugawa{ /*特化した内容はここで宣言する*/ } class Iemitsu extends Tokugawa{ /*特化した内容はここで宣言する*/ }
>javac Test.java >java Test ieyasuの役職は征夷大将軍 ieyasuの姓は徳川 hidetadaの役職は征夷大将軍 hidetadaの姓は徳川 iemitsuの役職は征夷大将軍 iemitsuの姓は徳川
Tokugawa クラスをスーパークラスに指定しメンバを継承することで、
Ieyasu, Hidetada, Iemitsu の3つのクラスは姓は徳川であり、
役職は征夷大将軍であるという共通した性質を持つことになります。
このように、スーパークラスに共通した性質をまとめてサブクラスに共通した性質を持たせることができるのです。
今までは extends節を使用して明示的にスーパークラスを指定することで継承を行ってきました。
しかし、extends節で明示的にスーパークラスを指定しない場合、Javaでは暗黙的に「extends Object」が付加されています。
つまり extends節を使用しない場合、自動的に Object がスーパークラスに指定され、Object クラスのメンバが継承
されるのです。
例えばコード1は次のように記述しても同じになります。
//コード1( extends Objectを付加 ) class Test extends Object{ public static void main( String argv[] ){ Shogun shogun = new Shogun(); System.out.println( "shogunの役職は" + shogun.getPost() ); } } class Shogun extends Object{ String post = "征夷大将軍"; public String getPost(){ return( post ); } }
このため、Javaでは継承関係を遡っていくと必ず最後は Object クラスに行き着きます。
逆に言うと全てのクラスは Object クラスのメンバを継承しているのです。
したがって、Objectで宣言されているメンバには全てのクラスからアクセスすることができます。
例えば Object クラスでは、以下のようなメソッドが定義されています。
public String toString()
本当にアクセスできるのか試してみましょう。
//コード7
class Test{
public static void main( String argv[] ){
Shogun shogun = new Shogun();
System.out.println( "shogunの文字列表現:" + shogun.toString() );
}
}
class Shogun{}
>javac Test.java >java Test shogunの文字列表現:Shogun@131f71a
このように、全てのクラスはObjectクラスのメンバを継承しています。
Objectクラスには他にもいくつかメソッドが定義されているので、
気になる人は直接ソースコードを見るか、APIを参照して下さい。
SJC-P対策問題集
Java認定試験( SJC-P/310-035 )対策のメルマガ問題集も好評発刊中!
もちろん無料です。
またバックナンバーも見やすくしてオンライン問題集として随時アップしていきます。
受験しない人でも Java の基礎知識を学習するのに最適です。
SJC-P対策参考書
現在、Java認定試験(SJC-P/310-035)対策の参考書は本当にたくさん出版されてます。
ここでは、その中から厳選した本当に役立つ参考書を紹介します。
無駄な出費を抑えるためにも、ぜひ参考にして下さい。
SJC-P対策Java用語集
Java認定試験( SJC-P/310-035 )合格のために必要な Java の用語を集めました。
試験対策にはもちろん、試験以外で Java を学習する際にもご活用下さい。
更新履歴
このサイトの最新情報はここで確認できます。
また、今までこのサイトがどのような軌跡を辿ってきたのかも知ることができます。
Javaを始める人へ
これからJavaを始めようとしているあなたへ。
Javaの勉強を始めるにはどうしたら良いのかを説明しています。
また、初心者に役立つ情報を提供していきます。
Java認定資格の概要
Java認定資格にはどのようなものがあるのか。
資格取得のためにはどのような知識が必要なのか。
その他、資格を取得することのメリットなど、Java認定資格の概要を説明します。
LINK
Javaの勉強に役立つリンク。
その他のプログラミングに関するリンク。
ソフトウェアに関するリンクなど、管理人の主観で集めたリンク集です。
相互リンクも常時募集中!
詳細は以下のページで確認して下さい。
このサイトについて
このサイト「1発合格★Java認定試験!」についての説明です。
サイトで掲載しているソースコードや問題や免責事項などについて説明しています。
初めての人は一度のぞいてみて下さい。
ちょっとひと息
仕事や試験勉強に疲れたら、ここでちょっと一息つきませんか。
一生懸命に打ち込むのも良いけど、たまには何も考えずにゆっくり休むのも良いものです。
たまにはのんびり脳みそをリフレッシュしましょう。
これからJavaを始める人へ / Java認定資格の概要
SJC-P対策Java用語集 / SJC-P対策問題集 / SJC-P対策参考書
このサイトについて / ちょっとひと息 / 更新履歴 / LINK
このサイトはどのページにでも直接リンクして頂いて結構です。リンク大歓迎!
このページのトップページのURLはhttp://sjc-p.obx21.com/です。
Java関連情報
Spring / JSF(JavaServer Faces) / Hibernate / Jbuilder / TOMCAT入門 / NetBeans / JUnit / Struts
Strutsリファレンス / ANT / TOMCAT / JavaでWebサービス / JDBC / JBoss / J2EE / iアプリ
EJB / アプレット / JavaとXML / JMF(Java Media Framework) / Java3D / Jakarta Commons / JNI / OracleとJava
EclipseでJava入門 / Java RMI, CORBA / JSP/サーブレット入門・初心者向け / Javaネットワークプログラミング / WebLogic
継承について:簡単に説明すると