前回はサブクラスとスーパークラスを使った「継承」について見た。
今回は「継承」に使用する「final」について。
finalとは?
finalはクラスからクラスへデータを引き継がせたくないときに使用。
ただし、finalが使われていても、オブジェクトを作成すればfinalがついたクラスのデータも使用することができる。
finalを使ったコード
クラスの前に「final」を付ける。
エラーが出る場合
int coin=10;
void Coment() {
System.out.println(“Sorry”);
}
} public class Keisho extends Parent {
int money=500; public static void main(String[] args) { Keisho Child = new Keisho(); Kodomo.Coment();
Child.Coment();
System.out.println(Child.money + Child.coin); }
オレンジのParentクラスに「final」とついていることから、あらゆるクラスはParentクラスの内容を継承することはできない。
上ではKeishoクラスが「extends」を使ってParentクラスの内容を引き継ごうとしている。
この場合はエラーになっちゃった。
エラーが出ない場合
finalを使っていてもエラーを出さない方法は「extends」を使わないということ。
extendsを使わない代わりに、Parentクラスのオブジェクトを作成することでParentクラスのメソッドやデータなどを使用することが可能になる。
int coin=10;
void Coment() {
System.out.println(“Sorry”);
}
} public class Keisho {
int money=500; public static void main(String[] args) {
Keisho Child = new Keisho();
Parent Kodomo = new Parent(); Kodomo.Coment(); System.out.println(Child.money + Kodomo.coin); }
extendが使えないから「Parent Kodomo = new Parent();」とオブジェクトを作ってParentクラスの内容を使えるようにしている。
この場合はエラーが出ない。
ただ、finalがついているクラスに更にアクセス修飾子がついていて、それが「private」だったらオブジェクトを作成しても使えない。
最後に
finalがあるとextendsが使えない。
だけどextendsを使わずにオブジェクトを作成すれば、引き継ぎたかったクラスのデータを使用することが可能になる。
finalは継承ができなくなるだけで、アクセス自体が制限されるわけではない。
アクセスを制限するのはアクセス修飾子だから、その辺りは混乱しないようにするということが大事って思った。
コメント