2017-02-17 1 views
-4

Un contexte: J'ai deux classes différentes (Client et ClientAuth) qui étendent la même classe abstraite, NetworkingAbstract (je l'appelle NA). Cette dernière classe a trois variables de classes statiques protégées différentes avec les types suivants: un Socket, un InputStream et un OutputStream.Java Inheritance, deux sous-classes de la même classe

Je crée un nouvel objet ClientAuth dans la classe Client. L'objet ClientAuth appelle une méthode qui initialise les variables de classe NetworkingAbstract, InputStream et OutputStream. Puis, quand la méthode revient, quand j'accède à ces variables (dans la classe Client), elles ont les mêmes valeurs qui leur ont été attribuées dans l'objet ClientAuth!

Cela correspond vraiment à mes besoins, mais je ne comprends pas pourquoi cela arrive!

Les variables de classe (OutputStream et InputStream) ne doivent-elles pas être indépendantes entre Client et ClientAuth malgré le fait qu'elles étendent toutes deux la même classe? Ou est-ce parce que tous deux étendent la même classe, ils partagent les valeurs?

J'espère que je fait ma question assez claire ..

+3

Il n'y a toujours qu'une seule instance d'une variable statique. c'est la définition de statique. – nhouser9

+0

Les variables statiques sont partagées entre toutes les instances de la classe et ses sous-classes. Il n'y a pratiquement pas d'héritage ou de substitution de variables statiques, elles ne sont pas comme des «variables de classe» auxquelles vous pouvez être habitué dans d'autres langues. – pvg

+2

S'il vous plaît ne pas décrire vos classes, montrez le code réduit au minimum nécessaire pour communiquer votre question (voir [mcve]) –

Répondre

2

Cette dernière classe a trois variables de classe statiques protégées avec les types suivants: une prise, un InputStream et un OutputStream.

Une variable statique est une variable associée à une classe, et non à des objets individuels de cette classe.

Vous n'avez pas besoin d'utiliser des variables statiques si vous voulez qu'elles soient uniques à chaque objet.

0

Les propriétés statiques des classes sont partagées entre toutes ses instances. Pour cette raison que toutes les propriétés appelées propriétés de la classe.

Lisez ceci java-static-methods-variables-static.