ホームページ  >  記事  >  Java  >  02.Javaの基礎 - 継承

02.Javaの基礎 - 継承

黄舟
黄舟オリジナル
2017-02-27 10:09:291231ブラウズ

基本概念

  • 継承の概念: 既存のクラスの形式を変えずに、既存のクラスの型に従って新しいクラスを作成するこの方法を継承と呼びます。

  • 継承の役割: 最初にクラス P を作成した後、新しいクラス S を作成する必要がありますが、機能は P と似ています。現時点で、怠惰になりたくて S を書き換えたくない場合は、継承を通じてそれを行うことができます。

  • 継承関係: 継承関係は親クラス(基底クラス)と子クラス(派生クラス)に分かれます。親クラスは継承されたオブジェクト (P など) であり、サブクラスは実装された継承されたオブジェクト (S など) です。

  • 継承方法: クラスの継承は単一継承です。つまり、SがPを継承した後は、P2を継承できません。

  • 継承の特徴: サブクラスは、継承を通じて親クラスのすべてのフィールド (変数) とメソッドを自動的に取得します。

  • 継承の実装: 継承は、キーワード extends を通じて Java で実装されます。

class Parent {
}

class Son extends Parent {
}

IS-A関係

Javaの継承関係はIS-A関係です。

IS-A 関係を理解する方法として、上記の例を取り上げます。S は P を継承し、S は P であると言えます。

相続関係では、後継者が後継者を完全に置き換えることはできますが、その逆はできません。一言で言えば、私たちは「人を動物のように扱うことはできるが、動物を人のように扱うことはできない」ということです。


コンストラクターと継承

クラスはコンストラクターを呼び出すことで初期化されます。継承に関して、サブクラスと親クラスのコンストラクターには次の特性があります:

  • サブクラスが親クラスを継承するとき、親クラスのコンストラクターが暗黙的コンストラクターである場合、手動で呼び出す必要はありません。

  • サブクラスが親クラスを継承するとき、親クラスのコンストラクターが明示的コンストラクターである場合、それを手動で呼び出す必要があります。

  • サブクラスが親クラスを継承する場合、コンストラクター呼び出しの順序は常に親クラスから下方向になります。

例を通して見てみましょう:

class Parent {    // 无参构造器,即隐式构造器。
    public Parent() {
        System.out.println("initializing Parent");
    }
}

class Son extends Parent {    // 带参构造器,属显式构造器
    public Son(String name) {        // 关键 -> 由于父类是隐式构造器,这里可以不调用。
        System.out.println("initializing "+name);
    }
}

class Grandson extends Son {    public Grandson() {        // 关键 -> 父类是显式构造函数,必须手动调用
        super("son");
        System.out.println("initializing Grandson");
    }
}public class Test {
    public static void main(String[] args) {
        Grandson grandson = new Grandson();        // 关键 -> 构造器调用顺序总是从父类依次往下进行的,打印内容如下:
        // initializing Parent
        // initializing Son
        // initializing Grandson
    }
}

基本概念

  • 継承の概念: 既存のクラスの形式を変更せずに、既存のクラスの型に従って新しいクラスを作成します。この方法は継承と呼ばれます。

  • 継承の役割: 最初にクラス P を作成した後、新しいクラス S を作成する必要がありますが、機能は P と似ています。現時点で、怠惰になりたくて S を書き換えたくない場合は、継承を通じてそれを行うことができます。

  • 継承関係: 継承関係は親クラス(基底クラス)と子クラス(派生クラス)に分かれます。親クラスは継承されたオブジェクト (P など) であり、サブクラスは実装された継承されたオブジェクト (S など) です。

  • 継承方法: クラスの継承は単一継承です。つまり、SがPを継承した後は、P2を継承できません。

  • 継承の特徴: サブクラスは、継承を通じて親クラスのすべてのフィールド (変数) とメソッドを自動的に取得します。

  • 継承の実装: 継承は、キーワード extends を通じて Java で実装されます。

class Parent {
}

class Son extends Parent {
}

IS-A関係

Javaの継承関係はIS-A関係です。

IS-A 関係を理解する方法として、上記の栗を例に挙げます。S は P を継承し、S は P であると言えます。

相続関係では、後継者が後継者を完全に置き換えることはできますが、その逆はできません。一言で言えば、私たちは「人を動物のように扱うことはできるが、動物を人のように扱うことはできない」ということです。


コンストラクターと継承

クラスはコンストラクターを呼び出すことで初期化されます。継承に関して、サブクラスと親クラスのコンストラクターには次の特性があります:

  • サブクラスが親クラスを継承するとき、親クラスのコンストラクターが暗黙的コンストラクターである場合、手動で呼び出す必要はありません。

  • サブクラスが親クラスを継承するとき、親クラスのコンストラクターが明示的コンストラクターである場合、それを手動で呼び出す必要があります。

  • サブクラスが親クラスを継承する場合、コンストラクター呼び出しの順序は常に親クラスから下方向になります。

例を通して見てみましょう:

class Parent {    // 无参构造器,即隐式构造器。
    public Parent() {
        System.out.println("initializing Parent");
    }
}

class Son extends Parent {    // 带参构造器,属显式构造器
    public Son(String name) {        // 关键 -> 由于父类是隐式构造器,这里可以不调用。
        System.out.println("initializing "+name);
    }
}

class Grandson extends Son {    public Grandson() {        // 关键 -> 父类是显式构造函数,必须手动调用
        super("son");
        System.out.println("initializing Grandson");
    }
}public class Test {
    public static void main(String[] args) {
        Grandson grandson = new Grandson();        // 关键 -> 构造器调用顺序总是从父类依次往下进行的,打印内容如下:
        // initializing Parent
        // initializing Son
        // initializing Grandson
    }
}

上記は 02.Java Basics - Inheritance の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。