Javaで親参照が子オブジェクトを指すことを深く理解する
オブジェクトのメモリの角度から理解してみてください.親Fatherが存在すると仮定すると、その変数は1 Mのメモリを消費する必要があります.サブクラスSonがあり、変数は0.5 Mのメモリを消費する必要があります.次に、メモリの割り当てをコードで確認します.
superを使用すると親クラスのインスタンスが指し示すので、子クラスをインスタンス化する前に親クラスをインスタンス化する、つまり親クラスの構造関数が先に実行される.sには親のインスタンスが含まれているため、sは親のメソッドを呼び出すことができる.
staticはその名の通り、静的で、彼は方法で、彼はこのクラスに属して、クラスの方法なので、彼は直接クラス名を引用して方法を引用することができて、クラスのオブジェクトを通じてこの方法を引用することができて、彼はクラスに覆われても、布団クラスに継承することもできません.簡単に言えば、彼はコンパイル時にクラスと一緒に配置され、実行時に動的にロードされません.
子クラスと親クラスのstatic問題-上書きも継承もせず、子クラスには親への参照が保存されます.
privateの場合、このメソッドまたはプロパティはクラス内でのみ使用できます.
Father f = new Father();// 1M .
Son s = new Son();// 1.5M !
superを使用すると親クラスのインスタンスが指し示すので、子クラスをインスタンス化する前に親クラスをインスタンス化する、つまり親クラスの構造関数が先に実行される.sには親のインスタンスが含まれているため、sは親のメソッドを呼び出すことができる.
Son s1 = s;//s1 1.5M .
Father f1 = (Father)s;// f1 1.5M 1M , ,f1 s , f1 ( 1M ), ( 0.5M ).
Son s2 = (Son)f;// ClassCastException. f 1M , 1.5M , .
Son s3 = (Son)f1;// , s3 1.5M . f1 s , 1.5M , 1M .
staticはその名の通り、静的で、彼は方法で、彼はこのクラスに属して、クラスの方法なので、彼は直接クラス名を引用して方法を引用することができて、クラスのオブジェクトを通じてこの方法を引用することができて、彼はクラスに覆われても、布団クラスに継承することもできません.簡単に言えば、彼はコンパイル時にクラスと一緒に配置され、実行時に動的にロードされません.
子クラスと親クラスのstatic問題-上書きも継承もせず、子クラスには親への参照が保存されます.
privateの場合、このメソッドまたはプロパティはクラス内でのみ使用できます.