Java thisとsuperについての小さな知識

4378 ワード

Java thisとsuperについての小さな知識
thisとsuperの一般的な特性は多くの人が知っています.
thisは、現在のオブジェクト自体を指すポインタを表し、オブジェクト内のメンバー変数とメソッドを参照できます.たとえば
  • this.xxx;
  • this.xxx();

  • superは、現在のオブジェクトの親、またはスーパークラスへのポインタとして理解できます.このスーパークラスとは、自分に最も近い親を指す.例:
  • super.xxx;
  • super.xxx();

  • ここで私たちが言いたいのはthisとsuperの構造方法における妙用です.
    thisとsuperは構造方法を参照します
    super(パラメータ):コンストラクション関数に配置され、親クラスのコンストラクション関数を呼び出すことを示します(コンストラクション関数の最初の文に配置する必要があります).
    this(パラメータ):このクラスの別の形式のコンストラクション関数を呼び出します(コンストラクション関数の最初の文に置くべきです).
    class Person { 
        public static void prt(String s) { 
           System.out.println(s); 
        } 
    
        Person() { 
           prt("  ·       : "+"A Person."); 
        }//    (1) 
    
        Person(String name) { 
           prt("  ·          : "+"A person's name is " + name); 
        }//    (2) 
    } 
    
    public class Chinese extends Person { 
        Chinese() { 
           super(); //         (1) 
           prt("  ·    ”       “: "+"A chinese coder."); 
        } 
    
        Chinese(String name) { 
           super(name);//                (2) 
           prt("  ·    ”          “: "+"his name is " + name); 
        } 
    
        Chinese(String name, int age) { 
           this(name);//              (3) 
           prt("  :               :his age is " + age); 
        } 
    
        public static void main(String[] args) { 
           Chinese cn = new Chinese(); 
           cn = new Chinese("codersai"); 
           cn = new Chinese("codersai", 18); 
        } 
    }

    実行結果:
    親・無パラメータ構築方法:A Person.子・呼び出し親「無パラメータ構築方法」:A chinese coder.親・一つのパラメータを含む構築方法:A person’s name is codersai子・呼び出し親」一つのパラメータを含む構築方法":his name is codersai親クラス・パラメータを含む構築方法:A person’s name is codersai子クラス・呼び出し親クラス"パラメータを含む構築方法":his name is codersai子クラス:サブクラスが同じパラメータを持つ構築方法を呼び出す:his age is 18
    この例から,superとthisを用いて親クラスの構築方法と本クラスの他の形式の構築方法をそれぞれ呼び出すことができる.
    例ではChineseクラスの第3の構造メソッドが本クラスの第2の構造メソッドを呼び出し,第2の構造メソッドが親を呼び出すので,親クラスの構造メソッドを呼び出してから,本クラスの第2の構造メソッドを呼び出し,最後に第3の構造メソッドを書き換える.
    superとthisの異同:
  • super(パラメータ):ベースクラスのコンストラクション関数(コンストラクション関数の最初の文であるべき)を呼び出す
  • this(パラメータ):このクラスの別の構造関数(構造関数の最初の文であるべき)
  • を呼び出す.
  • super:現在のオブジェクトの直接親クラスのメンバー(直接親クラスで非表示になっている親クラスのメンバーデータまたは関数にアクセスするために使用されます.ベースクラスが派生クラスと同じメンバー定義を持つ場合、super.変数名super.メンバー関数名(実参照)
  • this:現在のオブジェクト名を表します(プログラムで二義性が生じやすい場合はthisを使用して現在のオブジェクトを指定します.関数の形参加クラスのメンバーデータが同じ名前の場合は、thisを使用してメンバー変数名を指定する必要があります).
  • 呼び出しsuper()は、サブクラス構築メソッドの最初の行に書かなければならない.そうしないとコンパイルは通過しない.各サブクラス構築メソッドの最初の文は、super()を暗黙的に呼び出し、親にこのような形式の構築関数がなければ、コンパイル時にエラーを報告する.
  • super()はthis()と同様であり、super()はサブクラスから親クラスの構築方法を呼び出し、this()は同じクラス内で他の方法を呼び出す.
  • super()とthis()は、いずれも構造方法の最初の行に配置する必要があります.
  • thisでコンストラクタを呼び出すことはできますが、2つを呼び出すことはできません.
  • thisとsuperは同時に1つの構造関数の中に現れることができなくて、thisは必然的に他の構造関数を呼び出して、他の構造関数も必然的にsuper文の存在があって、だから同じ構造関数の中で同じ文があって、文の意味を失って、コンパイラも通過しません.
  • this()とsuper()はオブジェクトを指すため、static環境では使用できません.static変数、staticメソッド、static文ブロックなどが含まれます.
  • 本質的には、thisはオブジェクトを指すポインタですが、superはJavaキーワードです.
  • 例等転載先:http://www.cnblogs.com/hasse/p/5023392.html