自分にとって新しいものが次から次に出てくるから、頭こんがらがって挫折する人もいるのかな?と思う今日この頃。
私も今日は新しい項目、「継承」と呼ばれるものについて学習。
Javaの継承って何?
Javaプログラミングでは、あるクラスから別のクラスへ、メソッドなどのデータをそのまま引き継ぐことができる。
例えば「A」というクラスが「String OK=”お米”;」というデータと「void Yes(){System.out.println(“お寿司大好き”)};」というメソッドを持っていたとする。
Aクラスの内容を「B」というクラスがデータをそのまま引き継ぐことができる。
これが継承。
スーパークラスとサブクラス
継承にはスーパークラスとサブクラスというものが存在する。
クラスの継承はスーパークラスからサブクラスへと行われる。
スーパークラス
継承される側でサブクラスへと持っている内容を引き継がせることができる。
財産持ってる親。
サブクラス
継承する側でスーパークラスから持っている内容を引き継ぐことができる。
ただし、サブクラスを使用する際は「extends」という言葉を使って「スーパークラスから引き継いでます!」といった内容のことを書く必要がある。
親から財産を引き継ぐ子供。
「親が財産隠してたら子供はわかんないよねー。」ってことか。
継承を使用したコード
Keishoというクラスを作成し、Parentというクラスを自分で用意した。
int coin=10;
static void Coment() {
System.out.println(“Sorry”);
}
}public class Keisho extends Parent {
int money=500;
public static void main(String[] args) {
Keisho Child = new Keisho();
Parent.Coment();
System.out.println(Child.money + Child.coin);
}
}
継承コードの中身
Parentクラスの中には「int coin=10;」と「static void Coment() {System.out.println(“Sorry”);}」という内容が書いてある。
そしてKeishoクラスの中、メインメソッドの外側に「int money=500;」というデータがある。
実行したいプログラムはメインメソッドの中じゃないと使えない。
使うためにはオブジェクトを作ってお呼び出し。
Parentクラスはメインメソッドの外、Keishoクラスの「int money=500;」もメインメソッドの外側にある。
ParentクラスのComentメソッドは「static」があるからオブジェクトを作成する必要はないが、「int coin=10;」は「static」が無い。
オブジェクトの作成方法は以下の記事を参考。
自作したクラスに状態を表すデータを作る-オブジェクトの作成方法 by Javaプログラミング初心者 Vol.37
そのため「int coin=10;」をメインメソッド内で使用するためにはParentクラスのオブジェクトを作らないといけない。
Keishoクラスの「int money=500;」もメインメソッド内で使用するために、Keishoクラスのオブジェクトを作成しないといけない。
本来ならParentクラスとKeishoクラスの両方のオブジェクトを作成する必要がある。
でもKeishoクラスに注目。
「Keisho extends Parent」というのは「KeishoクラスはParentクラスの要素を引き継いでいる」ということを表している。
Parentクラスの要素を引き継ぐということは、目に見えないだけでKeishoクラスの中は以下のような形になっている。
int coin=10;
static void Coment() {
System.out.println(“Sorry”);
}
int money=500;public static void main(String[] args) {
Keisho Child = new Keisho();
Keisho.Coment();
System.out.println(Child.money + Child.coin);
この場合はクラスの中、メインメソッドの外側。
実際には緑の部分は見えてないよ。
このことによって何が起こるかというと、Parentクラスに含まれるすべての内容がKeishoクラスに引き継がれているため、作成するオブジェクトはKeishoクラスのものだけでいいということ。
作っているオブジェクトは名前を「Child」と付けた「Keisho Child = new Keisho();」のみ。
「Keisho.Coment();」のComentメソッドは、実際にはParentクラスの中にある。
同じく「System.out.println(Child.money + Child.coin);」の「coin」という変数もParentクラスの中。
Comentメソッドは「static」があるから、オブジェクトを作る必要が無いんだよね。
だからクラス名を使った「Keisho.Coment();」、もしくは「Parent.Coment();」のどちらでもOKって感じ。
もし「static」が無かったらオブジェクトを作成する必要があるから、その時は作ったオブジェクト名を使ってChild.Coment();と書いたら最小のコード数で済む。
継承を使う理由
なぜ「継承」を使用するかというと、クラスを新しく作るときに、すでに別のクラスに書かれているメソッドなどを使いたいときに再度同じコードを書く必要がないから。
要はすでに存在するコードを再利用して、入力するコード数を少なくするということが目的。
staticやpublicなどもそのまま引き継がれていく。
最後に
継承ってサブクラスとかスーパークラスとかが出てきたからちょっと難しいのかなと思ってたけど、やってみた感じでは、親が持っているものが子へそのまま受け継がれるっていう感じ。
プログラミングでは同じことを書くのを嫌うみたいだから、いかに効率的にコードを作成できるかということがポイント。
「継承」・・・しっかり覚えて活用しようっと。
コメント