継承:
public class ThisIsASubClass extends ThisIsASuperClass{
{
//declare stuff here
Object o = "Let's presume a string is passed";
super(o); //runs the super class (ThisIsASuperClass in this case), sending an object if needed (effectivly running the super class inside of the subclass)
//put the subclass code here
}
私が見つけた良い例 (長いですが、長いものを読むのに問題はありません。あなたがプログラマーなら、そうすべきではありません。):
クラスとオブジェクトのレッスンで提示された Bicycle クラスの可能な実装のサンプル コードを次に示します。
public class Bicycle {
// the Bicycle class has
// three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has
// one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// the Bicycle class has
// four methods
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
Bicycle のサブクラスである MountainBike クラスのクラス宣言は、次のようになります。
public class MountainBike extends Bicycle {
// the MountainBike subclass adds
// one field
public int seatHeight;
// the MountainBike subclass has one
// constructor
public MountainBike(int startHeight,
int startCadence,
int startSpeed,
int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}
// the MountainBike subclass adds
// one method
public void setHeight(int newValue) {
seatHeight = newValue;
}
}
MountainBike は Bicycle のすべてのフィールドとメソッドを継承し、フィールド seatHeight とそれを設定するメソッドを追加します。コンストラクターを除いて、4 つのフィールドと 5 つのメソッドを持つ新しい MountainBike クラスをまったくゼロから作成したかのようです。ただし、すべての作業を行う必要はありませんでした。これは、Bicycle クラスのメソッドが複雑で、デバッグにかなりの時間がかかった場合に特に役立ちます。サブクラスでできること
サブクラスは、サブクラスが含まれているパッケージに関係なく、その親のすべてのパブリック メンバーと保護されたメンバーを継承します。サブクラスがその親と同じパッケージに含まれている場合、親のパッケージ プライベート メンバーも継承します。継承されたメンバーをそのまま使用したり、置き換えたり、非表示にしたり、新しいメンバーで補足したりできます。
継承されたフィールドは、他のフィールドと同様に直接使用できます。スーパークラスのフィールドと同じ名前のサブクラスのフィールドを宣言して、非表示にすることができます (推奨されません)。スーパークラスにはないサブクラスで新しいフィールドを宣言できます。継承されたメソッドはそのまま使用できます。スーパークラスのインスタンス メソッドと同じシグネチャを持つ新しいインスタンス メソッドをサブクラスに記述して、オーバーライドすることができます。スーパークラスと同じシグネチャを持つ新しい静的メソッドをサブクラスに記述して、それを隠すことができます。スーパークラスにはないサブクラスで新しいメソッドを宣言できます。暗黙的に、またはキーワード super を使用して、スーパークラスのコンストラクターを呼び出すサブクラス コンストラクターを作成できます。
このレッスンの次のセクションでは、これらのトピックについて詳しく説明します。スーパークラスのプライベート メンバー
サブクラスは、親クラスのプライベート メンバーを継承しません。ただし、スーパークラスにプライベート フィールドにアクセスするためのパブリック メソッドまたはプロテクト メソッドがある場合、これらはサブクラスでも使用できます。
ネストされたクラスは、それを囲むクラスのすべてのプライベート メンバー (フィールドとメソッドの両方) にアクセスできます。したがって、サブクラスによって継承されたパブリックまたは保護されたネストされたクラスは、スーパークラスのすべてのプライベート メンバーに間接的にアクセスできます。オブジェクトのキャスト
オブジェクトは、インスタンス化された元のクラスのデータ型であることがわかりました。たとえば、次のように書くと
public MountainBike myBike = new MountainBike();
myBike は MountainBike 型です。
MountainBike は Bicycle と Object の子孫です。したがって、MountainBike は Bicycle であり、Object でもあり、Bicycle または Object オブジェクトが必要な場所であればどこでも使用できます。
逆は必ずしも真ではありません。Bicycle は MountainBike である可能性がありますが、必ずしもそうとは限りません。同様に、オブジェクトは自転車またはマウンテン バイクである場合がありますが、必ずしもそうとは限りません。
キャストは、継承と実装によって許可されているオブジェクトの中で、ある型のオブジェクトを別の型の代わりに使用することを示しています。たとえば、次のように書くと
Object obj = new MountainBike();
その場合、obj はオブジェクトとマウンテンバイクの両方になります (obj がマウンテンバイクではない別のオブジェクトに割り当てられるまで)。これは、暗黙のキャストと呼ばれます。
一方、次のように書くと、
MountainBike myBike = obj;
コンパイラは obj が MountainBike であると認識していないため、コンパイル時にエラーが発生します。ただし、明示的なキャストによって MountainBike を obj に割り当てることを約束していることをコンパイラに伝えることができます。
MountainBike myBike = (MountainBike)obj;
このキャストは、コンパイラが obj が MountainBike であると安全に想定できるように、obj に MountainBike が割り当てられていることを確認する実行時チェックを挿入します。実行時に obj が Mountainbike でない場合、例外がスローされます。注: instanceof 演算子を使用して、特定のオブジェクトの型に関する論理テストを行うことができます。これにより、不適切なキャストによる実行時エラーを回避できます。例えば:
if (obj instanceof MountainBike) {
MountainBike myBike = (MountainBike)obj;
}
ここで、instanceof 演算子は、obj が MountainBike を参照していることを確認します。これにより、ランタイム例外がスローされないという知識でキャストを行うことができます。
TL;DR: 継承を使用すると、すべての正方形が長方形になりますが、すべての長方形が正方形になるわけではありません..
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html