Java クラス 応用
継承
ベースとなるクラス(スーパークラスという)をベースにして新しいクラスを定義すること。これで定義されたクラスはサブクラスと呼ばれる
code:inheritance.java
class BaseClass {
String val = "Hoge";
void printVal() {
System.out.println(val);
}
}
class FugaClass extends BaseClass { // class <クラス名> extends <継承するクラス名> { /* メソッドやフィールド */ }
// メソッドprintValが使用できる
}
ただし、メソッドやフィールドなどにprivateアクセス装飾子が付与されている場合はそれらのメソッドやフィールドは継承されない。protectedアクセス装飾子にしていればサブクラスからスーパークラスの範囲はアクセスできる。
コンストラクタの継承
スーパークラスにコンストラクタが定義されていると、基本的にサブクラスは最初にスーパークラスのコンストラクタの処理を行い、サブクラスのコンストラクタが機能する。
サブクラスのコンストラクタの最初の処理にsuper()を使うとスーパークラスのコンストラクタの処理を行うことができる
スーパークラスのコンストラクタに引数がある場合はこれに引数を入れる
code:inher-const.java
class BaseClass {
protected String name;
BaseClass(String set_name) {
name = set_name;
}
void printName() {
System.out.println(name);
}
}
class SteveClass extends BaseClass {
SteveClass() {
super("Steve"); // BaseClassのコンストラクタ処理
}
}
抽象クラス
抽象クラスに設定すると、そのクラスはそのままインスタンスを初期化することはできず、サブクラスなどを作る必要がある
その中に抽象メソッドを定義すれば、スーパークラスを設定するときにそのメソッドの定義を必須にさせることができる
code:abstract.java
abstract class AbsClass {
abstract public void absMethodA();
}
class SubClass extends AbsClass {
public void absMethodA() {
System.out.println("SubClass's absMethodA!");
}
}