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にソースコードを公開しています。