ディレクトリ
1.継承
1.1構文
class Subclass extends Superclass{ }
1.2役割
- 表示されますが、コードの再利用性を向上させる継承しました。
- それは関係を持っていたように、クラス間の継承を表示され、多型の前提条件を提供しています。
- ただ、他のクラスが離れて機能を継承取得しないでください。
1.3クラスの継承
- サブクラスは親クラスを継承し、それが親クラスのメソッドとプロパティを継承します。
- サブクラスでは、親クラスで定義されたメソッドとプロパティを使用して、または新規データとメソッドを作成します。
- Javaでは、継承されたキーワードを使用し、「拡張」、親クラスのサブセットは、クラスが、「拡張」の親クラスではありませんされています
- (プライベート)サブクラスのプライベートメンバ変数やメソッドは、直接の親クラスにアクセスすることはできません
- Javaは多重継承が許可されていない、唯一の単一継承をサポートしています
2.書き換え方法(オーバーライド)
2.1定義
定義:また、カバーのリセット方法として知られている変換に親クラスから継承サブクラス方法で必要とされてもよいです。プログラムの実行時には、メソッドのサブクラスは、親クラスのオーバーライドします
要件を。
- オーバーライドメソッドは、同じメソッド名とメソッドを書き換えているパラメータリストや戻り値の型を持っている必要があります。
- オーバーライドメソッドには、アクセスの方法よりも厳しいを使用するように書き換えることはできません。
- 書き換えながらも、静的または非静的ように書き換えなければならない方法
- スローされたサブクラスの例外は、親クラスがメソッド異常に書き換えられるよりも大きくありません
- サブクラスは親クラスのプライベートなものにアクセスすることはできません
3. 4つのアクセス権修飾子
で親クラスとサブクラス場合と同じパッケージ以下、その後の長い民間ない親クラス修飾子のメンバーと同じくらいのためにプライベート、そしてサブクラスを使用することができ
ていない子クラスあれば、親クラスと同じパッケージ以下、あなただけのサブクラスを使用することができます親クラスprotecedと公共変性メンバー
4.キーワードのスーパー
指定されたオペレーティング親クラスを呼び出すためのJavaクラスのスーパーの使用:
- 親クラスで定義されたスーパーのプロパティにアクセスするために使用することができます
- この方法は、親クラスで定義されたスーパーメンバーを呼び出すために使用することができます
- スーパーは、親クラスのコンストラクタサブクラスのコンストラクタを呼び出すために使用されています
注意:
- 親クラスが表示されますと同じ名前のサブメンバーは、スーパーで区別することができます場合は特に
- スーパートレーサビリティは、直接の親に限定されるものではなく、
- 親クラススーパーのメモリ空間の代表的な識別子へスーパーこの使用は、このクラスのオブジェクト参照のこの代表的な類似
親クラスのコンストラクタを呼び出します
- すべてのサブクラスのデフォルトコンストラクタは、親クラスのコンストラクタのパラメータ中空にアクセスします
- 親がnullのコンストラクタパラメータがない場合、サブクラスのコンストラクタは、ステートメントの指定この(パラメータリスト)によって、親クラスまたは対応するコンフィギュレーションに存在するクラスやスーパー(パラメータリスト)を呼び出す必要があり、およびコンストラクタを配置する必要があります最初の行
- どちらのサブクラスのコンストラクタた場合は、明示的にコンパイルエラー、親クラスのコンストラクタまたは存在を呼び出して、親クラスが引数なしのコンストラクタを持っていません
。このスーパーの間** **違い
サブクラスのオブジェクトのインスタンス化
5.1単純なインスタンス化プロセスオブジェクト
インスタンス化プロセス5.2サブクラスオブジェクト!
6.ポリモーフィズム
6.1 Javaで具体二つがあります。
- オーバーロードされたメソッド(過負荷)と書き換え(上書き)。
- 多型は、オブジェクト-抽象クラスとインターフェイスに直接適用することができます。
:Javaの参照変数には2種類あり、コンパイル時の型と実行時の型を。コンパイル時の型変数が宣言されているの決定、実行時の型で使用されるタイプの変数実際に割り当てられたオブジェクトの決定を。
実行時とコンパイル時の型一貫性のない型は、多型をそこに持っている場合(多型)
多型のオブジェクトは- Javaで、オブジェクトのサブクラスを可能に親クラスの代替のオブジェクトの使用
Person e = new Student(); // Person类型的变量e,指向Student类型的对象
6.2上方遷移(アップキャスト)
オブジェクトサブクラスの親クラスの型への参照を指すことができるので、それは、親クラスの特別なサブクラスとして見ることができる:上方遷移(アップキャスト)。
参照型の変数親クラスの型宣言であれば、実際の参照サブクラスのオブジェクト、変数はなりませんので、もはや、追加サブクラスのプロパティとメソッドへのアクセス権を持っているプロパティは、コンパイル時に決定され、随時父をコンパイルクラス型、ノーサブクラスのメンバ変数
Student m = new Student();
m.school = “pku”; //合法,Student类有school成员变量
Person e = new Student();
e.school = “pku”; //非法,Person类没有school成员变量
属性是在编译时确定的,编译时e为Person类型,没有school成员变量,因而编译错误。
6.3仮想メソッド呼び出し(仮想メソッド呼び出し)
Person型のためのEのコンパイル時間は、メソッドが呼び出された時に決定され、実行時間、呼び出しがGETINFO Studentクラス()メソッドです。- 動的バインディング
Person e = new Student();
e.getInfo(); //调用Student类的getInfo()方法
概要:
前提:
- 継承または関係を実装する必要があります
- 持っては、運用カバー
メンバーの方法:
- コンパイル時:メソッドはクラス変数と呼ばれているかどうかは、参照を表示するために属します。
- ランタイム:コールは、実際のオブジェクトが所属するクラスのメソッドをオーバーライドします。
メンバー変数: - 多型を持っていますが、唯一の変数が属するクラスを参照しないでください。
適用例の多型
のメソッドを呼び出すための引数はパラメータタイプ親クラス型を宣言され、オブジェクトは、サブクラスを使用することができます
public class Test{
public void method(Person e) {
//……
e.getInfo();
}
public static void main(Stirng args[]){
Test t = new Test();
Student m = new Student();
t.method(m); //子类的对象m传送给父类类型的参数e
}
}
7.オブジェクト、パッケージ
7.1 instanceof演算子
//instanceof 判断一个对象(对象的实际指向)是否是类A的子类
Circle c2 = new Cylinder();
System.out.println(c instanceof Circle);
System.out.println(c1 instanceof Cylinder);
mainメソッド7.2オブジェクト・クラス
//object类,是所有类的父类,在你知道形参要使用什么类的时候,可以使用object类
Object o = new Circle();
//object类具有的方法
System.out.println(c1.equals(c2));//对象1.equals 对象2;判断对象的引用是否是同一个
System.out.println(c1.equals(c));
System.out.println(c1.equals(o));
c1 = c2;
//object是所有类的父类,所以所有类都可以执行object的方法
System.out.println(c1.equals(c2));//直接将c2的引用赋给c1,是同一个引用为TRUE;
//
System.out.println(o.hashCode());//一串hash码//873415566
//tostring打印对象时使用
System.out.println(o.toString());//当前引用的对象的内存地址//com.day03.Circle@340f438e