相続
オブジェクト指向のコンピュータープログラミング言語の3つの主要な特性:
継承、カプセル化、およびポリモーフィックな
継承:つまり、サブクラスは親クラスの構築メソッドを除くすべてを継承します。これにより、コードの再利用率が向上します。
実装構文は次のとおりです。
class 子类 **extend** 父类{
//子类方法
}
継承の注意と特徴:
-
extendsを使用して、親クラスを指定します。
-
Javaのサブクラスは1つの親クラスしか継承できません。Javaは単一継承またはマルチレベル継承です。(そしてC ++ / Pythonなどの言語は多重継承をサポートしています)。
-
サブクラスは、親クラスのすべてのパブリックフィールドとメソッドを継承します。
-
親クラスのプライベートフィールドとメソッドは、サブクラスではアクセスできません。
-
サブクラスのインスタンスには、親クラスのインスタンスも含まれます。superキーワードを使用して、親クラスのインスタンスへの参照を取得できます
。Super。Memberメソッド->親クラスのメンバーメソッド
Superを呼び出します。メンバープロパティ->親クラスを呼び出して元のクラスに戻します属性
スーパー(パラメーター)->親クラスのコンストラクターを呼び出します(最初の行に配置する必要があります) -
fianlによって変更されたシールクラスは継承できません。
-
Javaのフィールドとメソッドに対する4種類のアクセス権:(アクセス権は上から下に減少し
ます)public:
保護されたクラスの内部と外部の両方へのアクセス:異なるパッケージのクラスとサブクラスの内部、および同じパッケージの同じクラスクラスにアクセスできますが、他のクラスは
デフォルトにアクセスできません(パッケージアクセス許可、通常はデフォルト):クラス内のクラスと同じパッケージはアクセスできますが、他のクラスは
プライベートにアクセスできません:クラスのみがアクセスでき、他のクラスはアクセスできません -
Javaでサブクラスオブジェクトをインスタンス化する場合、静的コードブロックは一度しか初期化できません。
1.つまり、親クラスと現在のクラスの静的コードブロックが古く読み込まれていない場合、実行順序は次のとおりです。
親クラスの静的初期化ブロック->子クラスの静的初期化ブロック->親クラスの非静的初期化ブロック->親クラスの構築メソッド->サブクラスの非静的初期化ブロック->サブクラスの構築方法
2.親クラスの静的コードブロックと現在のクラスが読み込まれている場合、実行順序は次のとおりです。
親クラス非静的初期化ブロック->親クラスコンストラクター->サブクラスの非静的初期化ブロック->サブクラスコンストラクター(静的コードブロックは読み込まれません)
public class Parent {
static {
System.out.println("父类静态初始化块");
}
{
System.out.println("父类非静态初始化块");
}
public Parent() {
System.out.println("父类构造方法");
}
//方法与类名同名
public int Parent() {
return 0;
}
public static void main(String... args) {
//第一次创建时类还没有被加载,会执行静态初始化块
Child c = new Child();
System.out.println();
//第二次创建时类已经被加载,只执行非静态初始化块与构造方法
Child d = new Child();
}
}
class Child extends Parent {
public Child() {
System.out.println("子类构造方法");
}
static {
System.out.println("子类静态初始化块");
}
{
System.out.println("子类非静态初始化块");
}
}
运行结果:
父类静态初始化块
子类静态初始化块
父类非静态初始化块
父类构造方法
子类非静态初始化块
子类构造方法
父类非静态初始化块
父类构造方法
子类非静态初始化块
子类构造方法