【Javaプログラミング】finalとは?エラーが出る場合と出ない場合の違い-プロショvol.50

スポンサーリンク
Java攻略

前回はサブクラスとスーパークラスを使った「継承」について見た。

今回は「継承」に使用する「final」について。

スポンサーリンク

finalとは?

 

finalクラスからクラスへデータを引き継がせたくないときに使用。

ただし、finalが使われていても、オブジェクトを作成すればfinalがついたクラスのデータも使用することができる

 

finalを使ったコード

 

クラスの前に「final」を付ける。

エラーが出る場合

 

final class Parent{
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を使ってデータを引き継ごうとするとエラーになる

 

エラーが出ない場合

finalを使っていてもエラーを出さない方法は「extends」を使わないということ。

extendsを使わない代わりに、Parentクラスのオブジェクトを作成することでParentクラスのメソッドやデータなどを使用することが可能になる。

 

final class 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は継承ができなくなるだけで、アクセス自体が制限されるわけではない。

アクセスを制限するのはアクセス修飾子だから、その辺りは混乱しないようにするということが大事って思った。

このエントリーをはてなブックマークに追加

コメント

タイトルとURLをコピーしました