この質問がすでに何度も提起されていることを理解しています。しかし、これらすべての種類の変数に関する完全なガイドは見つかりません。クラス変数とクラス インスタンス変数を比較する記事をいくつか見つけましたが、インスタンス変数はどうでしょうか。では、インスタンス変数、クラス変数、クラス インスタンス
変数
の違いは何ですか? 継承可能な変数とそうでない変数は何ですか?
2 に答える
インスタンス変数は、 1つの特定のオブジェクト (別名インスタンス)に属する変数です。この場合、継承は関係ありません。オブジェクトは何からも継承できず、クラスだけが継承できるからです。
クラスのインスタンス変数が存在しません。クラスは他のオブジェクトと同じようにオブジェクトであるため、他のオブジェクトと同じようにインスタンス変数を持つことができます。クラスにインスタンス変数がある場合、これはクラス インスタンス変数と呼ばれることもありますが、単なるインスタンス変数です。繰り返しますが、継承することはできません。
クラス変数は奇妙な獣です。それらは間で共有されます
- クラス自体
- クラスのすべてのインスタンス
- クラスのすべてのサブクラス
- クラスのすべてのサブクラスのすべてのインスタンス
- クラスのすべてのサブクラスのすべてのサブクラス
- クラスのすべてのサブクラスのすべてのサブクラスのすべてのインスタンス
- …など…</li>
それらがどれほど広く共有されているかを考えると、それらは実際にはグローバル変数に似ています。
これを共有継承と呼ぶこともできますが、それは有用な用語ではないと思います。ポリモーフィック ディスパッチ、メッセージ送信、オーバーライドはありません。
Ruby では、継承という用語は、変数ではなくメソッドでのみ意味を持ちます。
インスタンス変数は、オブジェクトのインスタンスごとにデータが異なる変数です。
クラス変数は、クラスのすべてのインスタンスで共有される変数です。実際には、すべてのインスタンスが同じ値を指しており、すべてのクラス インスタンスで変更が見られます。