1.事前知識
事前知識として、上記リンクの内容が必要です。
2.継承とは
-
継承とは、既に定義されているクラスを元に、拡張や変更を加えたクラスを定義すること。 - 継承の元になるクラスを「
スーパークラス」という。 - 継承により新たに定義したクラスを「
サブクラス」という。 -
サブクラスの定義は、「サブクラス名 extends スーパークラス名」で行う。 -
サブクラスでは、スーパークラスとの差の分だけ記述します。 - Javaは言語の仕様上、1つのクラスに対して、
スーパークラスを1つしか定義できない。 -
サブクラスをさらに継承し、サブクラスを作ることができる。 - すべてのクラスは、
Java標準クラスライブラリ(Java API)に定義された java.lang.Objectクラス を継承している。 -
fainal修飾子が付いているクラスは継承できない。 - スーパークラスの
private変数に対しては、サブクラスから直接アクセスはできない。 - サブクラスのインスタンス化では、
スーパークラスのコンストラクタの処理が行われた後にサブクラスのコンストラクタの処理が行われる。 - サブクラスのコンストラクタの最初に
super()を書くことでスーパークラスのコンストラクタを任意に呼び出すことができる。 -
オーバーライドを使用することでスーパークラスで定義されたメソッドをサブクラスで再定義できる。
3.オーバーライドとは
-
オーバーライドとは、スーパークラスで定義されたメソッドをサブクラスで再定義すること。 -
オーバーライドは、スーパークラスのメソッドと同じメソッド名・引数で、異なる処理したい場合に使用する。 -
オーバーライドの基本的な記述例は以下の通りである。
スーパークラス
class スーパークラス名{
// スーパークラスメソッド
メソッド名(){
//処理
}
}
サブクラス
class サブクラス名 extends スーパークラス名 {
// オーバーライド
@Override
メソッド名(){
//処理
}
}
4.継承の基本的な書き方
テストクラス
package パッケージ名;
public class メインクラス名{
public static void main(String[] args) {
// インスタンスの生成
サブクラス名 変数名 = new サブクラス名();
// setterに値を入れる
変数名.setインスタンス変数名(実引数);
// getterで入れた値の取得をする
System.out.println(変数名.getインスタンス変数名());
}
}
スーパークラス
package パッケージ名;
class スーパークラス名{
// インスタンス変数の定義
private 型名 変数名;
// コンストラクタ(インスタンス生成時に実行される)
スーパークラス名(型名 引数){
初期化処理など
}
// setter
void setインスタンス変数名(型名 引数名){
this.変数名 = 引数名;
}
// getter
型名 getインスタンス変数名(){
return 変数名;
}
}
サブクラス
package パッケージ名;
class サブクラス名 extends スーパークラス名{
// インスタンス変数の定義
private 型名 変数名;
// コンストラクタ(インスタンス生成時に実行される)
サブクラス名(型名 引数){
super(引数);
初期化処理など
}
// setter
void setインスタンス変数名(型名 引数名){
this.変数名 = 引数名;
}
// getter
型名 getインスタンス変数名(){
return 変数名;
}
}
- 基本的なカプセル化は上記のように記述します。
5.事前準備
- Eclipseを起動し、
[ファイル(F)]→[新規(N)]→[Java プロジェクト]を選択する。
- プロジェクト名に
Test1と入力し、完了ボタンをクリックする。
-
[ファイル(F)]→[新規(N)]→[クラス]を選択する。
- パッケージと名前に
Test1と入力し、完了ボタンをクリックする。
-
Test1.javaが作成されたことを確認する。
- 3と同様の手順でパッケージに
Test1と入力し、 名前にTestSuperと入力し、完了ボタンをクリックする。
-
TestSuper.javaが作成されたことを確認する。
- 3と同様の手順でパッケージに
Test1、名前にTestSubと入力し、完了ボタンをクリックする。
-
Test1.java、TestSuper.java、TestSub.javaが作成されれば成功。
6.記述例
Test1.java
package Test1;
public class Test1 {
public static void main(String[] args) {
// インスタンスの生成
TestSuper ts1 = new TestSuper("A");
TestSub ts2 = new TestSub("B","ぎょうざ");
// インスタンスの表示
ts1.showName();
System.out.println();
ts2.showName();
}
}
TestSuper.java
package Test1;
public class TestSuper {
// インスタンス変数の定義
private String name;
// コンストラクタ(インスタンス生成時に実行される)
public TestSuper(String name) {
this.name = name;
}
// setter
public void setName(String name) {
this.name = name;
}
// getter
public String getName() {
return name;
}
public void showName() {
System.out.println("名前:"+name);
}
}
TestSub.java
package Test1;
public class TestSub extends TestSuper {
// インスタンス変数の定義
private String food;
// コンストラクタ(インスタンス生成時に実行される)
public TestSub(String name,String food) {
super(name);
this.food = food;
}
// setter
public void setFood(String food) {
this.food = food;
}
// getter
public String getFood() {
return food;
}
@Override
public void showName() {
super.showName();
showFood();
}
public void showFood() {
System.out.println("好きな食べ物:"+food);
}
}
- 上記の文をコピーして、文字コードは
S-JISを指定し、ファイル名をTest1.java,TestSuper.java,TestSuper.javaで保存し、実行するとこうなります。↓↓
7.GitHub
GitHubにソースコードを公開しています。
