トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

すっきりわかるJava入門を読む④(11章継承)

前回の続き。11章、継承

bibinbaleo.hatenablog.com

継承

何かのクラスをもとに似たようなクラスを作るとき、コピペでクラスを作ったら、元のクラスに変更があったときに、どちらも変更しないといけない。

また同じようなコードばかりだと見通しが悪い。

メンテナンスしにくい

そこで元のクラスを継承したクラスを書く

書き方

public class クラス名 extends 元となるクラス{

追加するフィールド

追加するメソッド

}

HeroクラスをもとにSuperHeroクラスだけに追加するものを書けばいい

子クラスに書いてなくて親クラスに書いてあるメソッドも、子クラスのインスタンスで呼び出すことができる。

呼び方

元となるクラスを親クラス、スーパークラス、基底クラス

新しいクラスを 子クラス、サブクラス、派生クラス

などと呼ぶ

オーバーライド

親クラスで定義してあるが、特定の子クラスでちょっと変えたいものは、同じ名前でメソッドを定義して上書きができる。

これをオーバーライドという

継承禁止

継承してほしくないクラスにはfinalを付ける。

public final class Main{}

stringクラスはAPIで継承禁止と指定されている

c#だとfinalじゃなくてsealed class クラス名 だって

C#入門/継承禁止 - WisdomSoft

super

インスタンスのメソッドやフィールドにアクセスするには

super.メソッド名

のようにsuperを付ける

自分のインスタンスへはthis.

祖父母インスタンスにはアクセスできない

親のコンストラク

自動で親のコンストラクタがよばれ、そのあと子のコンストラクタが呼ばれる。

親コンストラクタの呼び出しは

super();

書かなくても勝手に呼ばれる。

親クラスのコンストラクタに引数の指定があるときは

super("名無しの剣",300);

正しい継承

子クラスは親クラスの一種である。

・薬草はアイテムの一種である。

・村人はキャラクタの一種である。

親クラスほどあいまい(汎化)

子クラスほど具体的(特化)

 

最後に

C#だと

public class NewBehaviourScript : MonoBehaviour {

extendsが「:」になってる?

unity3d.com

スッキリわかるJava入門 第2版 (スッキリシリーズ)