お品書き
+ 継承って?
+ メリット
+ 注意点
+ Sample
◆継承って?
既存のクラスを基に変数やメソッドを追加したクラスを作る。
継承関係にあるのクラスをスーパークラス、
子のクラスをサブクラスという。
元々あるクラスと機能追加をした新しいクラスの2つがあるってことね。
Personクラスは「人」のクラスということで「人」が共通して持っている情報、名前などを扱う変数やメソッドを定義しておく。
SubClassはPersonクラスを継承することを考える。
どゆことか。
Personクラスが持っているメンバー変数やメソッドを同じように使えるということ。
さらに、各クラス独自の変数やメソッドを追加したりできる。
例えば、Teacherクラスは担当科目の情報、Studentクラスでは学籍番号などを持たせる等の、クラス構成を作ることができる。
どうやって親クラスの機能を引き継げるの?
class Student extends Person{
}
extendsとは拡張するという意味の英単語。
この記述でPersonクラスが持っているメンバー変数とメソッドを受け継いで使うことができる。
SubClassには独自のメンバー変数やメソッドだけを記述すれば良い。
メリット
コーディングがラクになるのと、メンテナンスがラク。
例えば、名前のデータ型や表示方法を変えたいとき、名前に関する記述がいろんなところに出ていると、修正箇所が増えてしまうが、名前の記述がPersonクラスにしか記述がなければ、そこだけの修正で済む。
注意点
継承できるクラスは1つだけ。
extendsの後には1つのクラスしか書けません。
複数記述できてしまうと、メンバー変数やメソッドの名前が被ってしまってエラーに繋がりやすい。
継承するとSuperClassのメンバー変数やメソッドを引き継いで使えるが、コンストラクタは継承しない。
これは、コンストラクタの名前はクラス名と合わせるというルールがあるため。
SubClassからPersonクラスのコンストラクタを呼び出して利用することはできる。
◆継承Sample
public class Person{
private String name; //共通の情報としてname メンバー変数として名前を持っている。
public void setName(String n){ //名前を設定するためのメソッド
name = n;
}
public void display(){ //名前を表示するためのメソッド
System.out.println("名前:" + name);
}
}
public class Student extends Person{ //Personクラスを継承
private int stuNo; //クラス独自の変数として学籍番号を持つ
public void setStuNo(int s){ //学籍番号を設定するためのメソッド
stuNo = s;
}
public void displayStuNo(){ //学籍番号を表示するメソッド
System.out.println("学籍番号:" + stuNo);
}
}
public class StuSample{
public static void main(String[] args){
Student stu = new Student(); //サブクラスのStudentクラスのオブジェクトstuを作る
// スーパークラスのメソッド
stu.setName("大輔");
stu.display();
// サブクラスのメソッド
stu.setStuNo(1);
stu.displayStuNo();
}
}
C:\Java\1>java StuSample
名前:大輔
学籍番号:1
スーパークラスの持っているメソッド、サブクラスが持っているメソッド、それぞれ呼び出して情報を表示できていることを確認。