目次
仕組み | クラスの継承とは |
親クラスのコンストラクタを実行する(super) | |
親クラスのメソッドを実行する(super) | |
クラスの継承を禁止する(final) |
クラスの継承とは
クラスがクラスを継承すると、継承先のクラスは継承元のクラスの機能を引き継ぎます。
継承先のクラスは、差分の機能を追加するだけでよくなります。
継承元のクラスのことを「基底クラス 」or 「親クラス 」or 「スーパークラス」といいます。
継承先のクラスのことを「派生クラス」 or「 子クラス」 or「 サブクラス」といいます。
継承は、オブジェクト指向の3大要素の一つです。(他はカプセル化とポリモーフィズム)
クラスの継承のサンプル
3行目は親クラスで、8行目は子クラスです。
8行目は、extendsで3行目のColor1クラスを継承しています。
package test1;
class Color1 {
String getName1() {
return "赤";
}
}
class Color2 extends Color1 {
String getName2() {
return "青";
}
}
public class Test1 {
public static void main(String[] args) {
Color2 c2 = new Color2();
System.out.println(c2.getName1()); // 赤
System.out.println(c2.getName2()); // 青
}
}
16行目のgetName1メソッドは子クラスに存在しませんが実行できます。
→子クラスは、親クラスのメソッドを再実装しないで済んでいます。継承の利点です。
point
class 継承先のクラス名 extends 継承元のクラス名{ } |
- 継承先のクラスは、「extends」の後ろに継承元のクラス名を記述します。
- 継承元のクラス(親クラス)は、1つのみ指定できます。
- 継承したクラスをさらに継承することはできます。
- extendsを省略した場合、Objectクラスを継承していることになります。
- Javaのすべてのクラスは、Objectクラスを継承しています。
→equalsメソッドなどのObjectクラスのメソッドを使用できます。 - 以下は、OracleのJava8のObjectクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html
親クラスのコンストラクタを実行する(super)
3行目は親クラスで、10行目は子クラスです。
package test1;
class Color1 {
String name;
public Color1(String name) {
this.name = name;
}
}
class Color2 extends Color1 {
public Color2(String name) {
super(name);
}
}
public class Test1 {
public static void main(String[] args) {
Color2 c2 = new Color2("赤");
System.out.println(c2.name); // 赤
}
}
11行目は、コンストラクタです。
12行目はsuperで親クラスのコンストラクタを実行します。
point
親クラスのコンストラクタを実行する場合、superを使用します。
親クラスのメソッドを実行する(super)
3行目は親クラスで、8行目は子クラスです。
package test1;
class Color1 {
String getName1() {
return "赤";
}
}
class Color2 extends Color1{
String getName2() {
return(super.getName1());
}
}
public class Test1 {
public static void main(String[] args) {
Color2 c2 = new Color2();
System.out.println(c2.getName2()); //赤
}
}
10行目はsuperで親クラスのメソッドを実行します。
point
親クラスのメソッドを実行する場合、superを使用します。
クラスの継承を禁止する(final)
3行目は親クラスで、8行目は子クラスです。
3行目のクラスの前にfinal修飾子がついています。
package test1;
final class Color1 {
String getName1() {
return "赤";
}
}
//class Color2 extends Color1{
// String getName2() {
// return "青";
// }
//}
public class Test1 {
public static void main(String[] args) {
Color2 c2 = new Color2();
System.out.println(c2.getName1()); //
System.out.println(c2.getName2()); //
}
}
8行目のクラスは、3行目のクラスを継承できません。コンパイルエラーになります。
point
アクセス修飾子 final class クラス名 |
クラスの前にfinalをつけるとクラスの継承が禁止されます。
関連の記事