1. すてに存在するクラスに, 新しいメソッドやフィールドを追加したり, メソッドを上書きしたりして, 新しいクラスを作ることができる.
2. サブクラス: クラスを拡張して出来た新子クラスをもとのクラスのサブクラス (subclass) と呼ぶ.
3. スーパークラス: もとのクラスを, 拡張して出来たクラスのスーパークラス (superclass) と呼ぶ.
長方形に名前を付けた新しいクラスを宣言する:
class NamedRectangle extends Rectangle{
}
1. Rectangle のサブクラスである NamedRectangle を宣言する
2. NamedRectangle のスーパークラスは, Rectangle です.
3. Rectangle は, NamedRectangle の拡張クラスです.
class ClassB extends ClassA{
...
}
スーパークラス ClassA とサブラクス ClassB
Rectangle.java:
class Rectangle{
int width;
int height;
Rectangle(){
setSize(0, 0);
}
Rectangle(int width, int height){
setSize(width, height);
}
void setSize(int width, int height){
this.width = width;
this.height = height;
}
public String toString(){
return "[" + width + ", " + height + "]";
}
}
NamedRectangle.java:
class NamedRectangle extends Rectangle{
String name;
NamedRectangle(){
super();
name = "NO NAME";
}
NamedRectangle(String name){
super(200, 32);
this.name = name;
}
}
1. サブクラスはスーパークラスのフィールドとメソッドを受け継ぐ.
2. コンストラクタは継承されない.
3. スーパークラスのコンストラクタの明示的な呼び出しには super() を使う.
1. サブクラスはスーパークラスの一種である. をオブジェクト指向の用語で [IS-A 関係] という.
2. 犬は哺乳類の一種である.
3. NamedRectanlge は, Rectanlge の一種である.
インスタンスをフィールド型として持つとそのインスタンスを自分のものとして扱える. このような関係を [HAS-A 関係] という.
サブクラスでスーパークラスから継承したメソッドやフィールドに同じ名前のメソッドやフィールドを宣言すると変更することができる. これをオーバーライドと呼ぶ.
1. スーパークラスで private と書かれたフィールドやメソッドは, サブクラスに継承されない.
2. 他のクラスから利用させたくないフィールドやメソッドに対して利用する.
3. そのクラス内部だけで使うため.
4. このように名前の使用を許可したり, 禁止したりする機構をアクセス制御と呼ぶ.
1. メソッドの名前と引数の型だけが決まっていて, 実装がないメソッドを抽象メソッド (abstract メソッド) と呼び, そのクラスを抽象クラス (abstract クラス) と呼ぶ.
2. 抽象クラスはそのサブクラスを宣言して抽象メソッドをオーバーライドする必要がある.