JAva-基礎編-継承

6390 ワード

継承  簡単に述べる
1 継承の特徴:
            1.  コードの多重化を向上
             2.  クラスとクラスの関係を生み出す
             3.  継承するには、クラスとクラスの関係が必要です.
二  2つのクラスの間に所属関係があるかどうかをどのように判断しますか?
            例:
         
  class  A

            {

                      void demo1(){}

                      void demo2(){}

              }


           class B   extends  A

             {

                    void demo1(){}

                }

       ***この2つのクラスについて,クラスBにクラスAのdemo 2メソッドがなければ,それらの間には所属関係がなく,継承関係は存在しない.
          *** まず親がいて、 後にサブクラスがあります.
三  継承関係 変数の呼び出し:
       1.java言語では、単一継承のみがサポートされ、マルチ継承はサポートされません.マルチ継承はセキュリティ上の危険性をもたらしやすいため、複数のクラスで同じ機能が定義されている場合、機能内容が異なる場合、サブクラスオブジェクトはどの機能を実行すべきか分かりません(java言語でマルチ実装をサポートしています).
       例:
まず2つのクラスを定義します
       
<pre name="code" class="java">class A

{
	void show() {
		System.out.println("java");
	}
}

class B {
	void show() {
		System.out.println("worke");
	}

}
 
 

定义类C来继承A  B

     

class C extends A,B

{
	void show() {
	}

}

テストクラスの作成
     
class Test

{

	public static void main(String[] args)

	{

		C c = new C();

		c.show();//                   show  

	}

}

       2.java言語で多層継承をサポート
     例:
     
class A

{
	void show() {
		System.out.println("java");
	}

}

   
class B extends A

{
	void show() {
		System.out.println("worke");
	}

}
class C extendsB

{
	void show() {
	}

}

      
      3.変数アクセス
         サブクラスに非プライベートな同名メンバー変数が表示された場合、サブクラスがこのクラスの変数にアクセスする場合にthisを使用します. ,親クラスの同じ名前の変数にアクセスする場合 superを使用するには
例:
     
class Fu

{
	int number = 2;

}

     
class Zi extends Fu

{

	int number = 3;

	void show()

	{

		int number = 5;

		System.out.println(number); // 5

		System.out.println(this.number);// 3

		System.out.println(super.number);// 2

	}

}

テストクラスを作成
public class Test {
	public static void main(String[] args) 

{
        Zis  z = new Zis();
         z.show();
}

出力結果は5,3,2
四 継承中の関数の呼び出し
     1.書き換え(上書き)
       子クラスが親クラスを継承し、親クラスの機能を踏襲すると、子クラスにはその機能が備わっているが、機能の内容は親クラスとは異なり、この場合、親定義機能を保持し、内容を再定義する.
 例えば:————————
   
class Fu

{
	void show()

	{
		System.out.println("haha");

	}

}

     
class Zi extends Fu

{
	void show()
	{
		System.out.println("000");

	}
}

このZiクラスには、親Fuのショーメソッドが上書きされています
       2.上書き要求
      <1>サブクラスが親を上書きするには、子の権限が親以上であることを保証する必要があります.そうしないと、コンパイルに失敗します.
          <2>静的クラスは静的クラスのみを上書きできます
  例えば:————————
class Fu

{
	int show()
	{
		return null;

	}
}
class Zi extends Fu

{
	void show()
	{
		System.out.println("000");

	}

}

     この継承関係ではshowメソッドは上書きされていない,すなわちクラスZiには2つのshowメソッドがある.
例:————————
        
class Fu

{
	private void show()
	{
		System.out.println("haha");

	}
}

    
class Zi extends Fu

{
	public void show()
	{
		System.out.println("000");
	}
}

この継承関係では、サブクラスのshowメソッド権限(public)が親クラスのshowメソッド権限(private)よりも大きいため、コンパイルは通過することができる.
例:——————
     
class Fu
{
	void show()
	{
		System.out.println("haha");
	}
}

     
class Zi extends Fu

{
	private void show()
	{
		System.out.println("000");

	}
}

この場合、サブクラスのshowメソッド権限(private)は親クラスのshowメソッドの権限よりも小さいため、継承は許可されません.
五 継承関係のコンストラクション関数
      サブクラスがクラスを初期化すると、親コンストラクション関数も実行されます.サブクラスのコンストラクション関数の前に暗黙的な文super()があるからです.
例えば:——————
class Fu

{
	Fu()
	{
		System.out.println("Fu class method");

	}
}

サブクラス
class Zi extends Fu

{
	Zi()
	{
		System.out.println("zi class method");

	}
}

テストクラスの作成
class Test

{
	public static void main(String[] args)
       {
             Zi    z  =  new Zi();
            //         Fu class method
                         //Zi   class  method

        }
}

上記の例では、サブクラスオブジェクトのインスタンス化中に親ドロップ構造関数が1回実行されることを示しています.
例:——————
class Fu

{
	Fu()

	{
		System.out.println("Fu class method");

	}

	Fu(int i)

	{
		System.out.println("Fu class method" + i);

	}
}

サブクラス
class Zi extends Fu
{
	Zi()
	{// super____Fu()
		System.out.println("zi class method");

	}

	Zi(int i)
	{// super____Fu()
		System.out.println("zi class method" + i);

	}
}

テストの作成
class Test
{

	public static void main(String[] args) {

		Zi z = new Zi();

		Zi z = new Zi(4);

		//         Fu class method
		// Zi class method
		// Fu class method
		// Zi class method 4

	}
}

例——————
class Person

{
	private String name;
	private int age;

	Person(String name)
	{
		this.name = name;
	}
	void show() {
	}
}

class Student extends Person
{
	Student(String name)
	{
		super(name);
		//             
	}
	void method()
	{
		super.show();
	}
}

六 サブクラスインスタンス化プロセス
     サブクラスのすべてのコンストラクション関数は、サブクラスの各コンストラクション関数の最初の行に暗黙的なsuper()があるため、デフォルトでは親クラスの空のパラメータのコンストラクション関数にアクセスします.
       親に空のパラメータのコンストラクション関数がない場合、サブクラスは親にアクセスするコンストラクション関数を手動でsuper文形式で指定する必要があります.
      サブクラスのコンストラクション関数の最初の行は、this文がこのクラスのコンストラクション関数にアクセスすることを手動で指定することもできます.サブクラスの少なくとも1つのコンストラクション関数が親クラスの空のパラメータのコンストラクション関数にアクセスします.