パッケージorg.yuan.my_project。 クラス祖父母 { パブリック祖父母() { System.out.printlnは( "祖父母を作成しました。" )。 } 公共祖父母(文字列) { するSystem.out.println( "祖父母Created.String:" + 列)。 } } クラスの親が延び祖父母 { パブリック親() { // スーパー( "Hello.Grandparentを。"); System.out.println( "親が作成しました" ); //スーパー( "Hello.Grandparent。"); } } クラス子供延び親 { パブリック子() { System.out.printlnは(「作成された子を」)。 } } パブリック クラスTestInherits { 公共 静的 ボイドメイン(文字列引数[]) { 子C = 新しい子供()。 // のSystem.out.println(c)前記 } }
1、コンストラクタの呼び出しは、条件を継承:基底クラスのコンストラクタのスーパーを呼び出すことにより、サブクラスのコンストラクタの最初のステートメントでなければなりません。
2.この方法は、説明します。
パッケージorg.yuan.my_project。 クラスベース{ ボイド方法(){ System.out.printlnは( "ベース" )。 } } クラスのサブ延びベース{ ボイド方法(){ // super.method()。 System.out.println( "小" ); } } パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ 基本SUB1 = 新しいサブ()。 sub1.method(); サブSUB2= 新しいサブ()。 sub2.method(); } }
構文規則を覆う:元のメソッドへのアクセスを許可以上範囲をカバー(1)の方法;(2)コーティング方法スローされた例外が元のメソッドよりもない;(3)最後の文のための方法を上書きできない;. (4)静的メソッドをオーバーライドすることができません。
3、
パブリック クラスParentChildTest { 公共 静的 ボイドメイン(文字列[]引数){ 親親 = 新しい親()。 parent.printValue(); 子供の子 = 新しい子供(); child.printValue(); 親 = 子。 parent.printValue(); parent.myValue ++ ; parent.printValue(); ((子)親).myValue ++ ; parent.printValue(); } } クラス親{ 公共 のintmyValue = 100 ; 公共 ボイドprintValue(){ System.out.printlnは( "Parent.printValue()、myValue =" + myValue)。 } } クラス子供延び親{ 公共 のint myValue = 200 。 公共 ボイドprintValue(){ System.out.printlnは( "Child.printValue()、myValue =" + myValue)。 } }
結果:
概要:(1)子と親クラスが同じメソッドを持っている場合、親クラス変数の参照をオブジェクトの種類によって決定され、最終的にメソッド呼び出し、彼らの「本当の」サブクラスオブジェクトを、聞かせて、すなわち:オブジェクトサブタイプは、メソッドのサブタイプが呼び出され、親の型である、あなたは親タイプを呼び出します。(2)子と親クラスが親クラスのフィールドの代わりに、同じフィールド、サブクラスまたは隠されたフィールドを持っている場合は、サブクラスのアクセス方法フィールドのサブクラス(フィールドの代わりに、親クラス)。あなたは本当にサブクラスメソッドの親クラスを訪問したい場合は、フィールドに隠されている、あなたはそれにアクセスするためのsuperキーワードを使用することができます。