2016-06-15 6 views
1

static属性はクラス固有であり、それはクラスの属性のみであることを意味します。私はインスタンスがインスタンス変数を使用することを知っています。私の質問は、Animalというクラスを作成し、liveという静的属性を作成すると(生きているのはAnimalの静的属性なので意味があります)、dog,humanクラスはAnimal?それらはすべてライブでもあり、ここでインスタンスが実際にこの静的属性liveを共有していることがわかります。クラスはインスタンスをインスタンス化します、静的はクラス固有です、そして、インスタンスが静的属性を共有しないのはなぜですか?

私にJava定義またはOracleドキュメント定義を与えないでください。私はそれをすべて知っている。初心者としては、なぜそれが文字通り意味が分からないのだろうと思っていました。動物を見たり、お互いの年齢層に影響を与えることができない。

+1

「ライブであることが動物の静的な属性であるため、理にかなっている」いいえ、それはありません、すべての動物は、自身の人生を持つべきではありませんか?いくつかの読書:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html –

+0

私たちが生きている動物について話しているならば、彼らはすべて「生きている」、そうではありませんか? –

+0

犬は生きている、人間は生きている、そして同時に動物は生きている。 –

答えて

4
class Animal { 
    int age; 
} 

は、上記ageがあり、それぞれが独立している動物のサブクラスのインスタンスを含む動物のすべてのインスタンスことを示しています。内部的には、new Animal()またはnew Dog()を呼び出すと、Javaはそのインスタンスにageのスペースを確保します。

class Animal { 
    static String kingdom = "Animalia"; 
} 

この1つは、しかし、Animalという名前クラスは正確に一つの、性質を持っており、それはAnimal.kingdomと呼ばれていたことを示します。そのkingdomプロパティは、動物インスタンスせずに利用され、そして(犬動物を拡張階層で)それAnimal.kingdomDog.kingdomsomeAnimalInstance.kingdom、及びsomeDogInstance.kingdomとして利用可能であるように見えます。ただし、これらのすべては礼儀として提供されています。公式のアクセサーはAnimal.kingdomであり、Animalまたはそのサブクラスの多くのインスタンス(ゼロを含む)に関係なく、1つしかありません。

関連:Why should the static field be accessed in a static way?

関連する問題