C++ では、すべてのクラス メンバー メソッドが非仮想メソッドとなります。そうするためには、プレフィックスとしてキーワードを使用する必要があります。 バーチャル 。一方、Java では、すべてのクラス メンバーのメソッドがデフォルトで仮想として設定されます。それらを非仮想化するには、キーワードを使用します。 ファイナル 。
Java の参照変数は基本的に、オブジェクトのアドレスを 16 進数で保持する変数であり、後でバイナリ システムに変換され、基本的にヒープ メモリに格納されるオブジェクトのアドレスになります。
JavaScript文字列置換
サイズが計算できないため、プリミティブ型とは異なる参照変数。 Java では、Parent クラスの参照変数は、そのオブジェクト参照とその子オブジェクト参照を保持できます。例を使用して非メソッドメンバーについて見てみましょう。
例:
Java// Java Program to Demonstrate that Non-method Members // are Accessed according to Reference Type // (Unlike methods that are accessed according // to the referred object) // Class 1 // Super class class Parent { int value = 1000; // Constructor of super class Parent() { // Print statement System.out.println('Parent Constructor'); } } // Class 2 // Sub class class Child extends Parent { int value = 10; // Constructor of sub class Child() { // Print statement System.out.println('Child Constructor'); } } // Class 3 // Main class class GFG { // Main driver method public static void main(String[] args) { // Creating an object of sub class inside main() // method Child obj = new Child(); // Printing the reference of child type System.out.println('Reference of Child Type :' + obj.value); // Note that doing 'Parent par = new Child()' // would produce same result Parent par = obj; // Par holding obj will access the value // variable of parent class // Printing the reference of parent type System.out.println('Reference of Parent Type : ' + par.value); } }
出力
Parent Constructor Child Constructor Reference of Child Type :10 Reference of Parent Type : 1000
出力の説明: 親参照変数が子クラスの参照を保持しており、親クラスと子クラスの両方に「value」変数がある場合、子クラスのオブジェクト参照を保持しているかどうかに関係なく、親クラスの「value」変数を参照します。子クラスのオブジェクト参照を保持する参照は、子クラスのメンバー (関数または変数) にアクセスできなくなります。これは、親参照変数が親クラス内のフィールドにのみアクセスできるためです。したがって、参照変数のタイプによって、インスタンス化されるオブジェクトのタイプではなく、呼び出される「値」のバージョンが決まります。これは、コンパイラがメソッドに対してのみ特別な実行時ポリモーフィズム メカニズムを使用するためです。 (インスタンス化されるオブジェクトのタイプによって、呼び出されるメソッドのバージョンが決まります)。
注記: 型キャストによる親ポインタを使用して子データ メンバーにアクセスできるようになります。