Co je proměnná instance?
Proměnná instance je část dat v objektově orientovaném programování, která má svou vlastní jedinečnou hodnotu pro každý objekt, ve kterém je umístěna. Proměnné instance mohou být také nazývány členy instance, nestatická pole a datové členy. Jsou důležitou součástí většiny objektů a obsahují specifické části dat, které objekt používá pro výpočet.
Například, pokud existují dva objekty, A a B, kde objekt A má instanční proměnnou nazvanou „bla,“ a objekt B má také instanční proměnnou nazvanou „bla,“ dvě proměnné „bla“ jsou odlišné entity. Každá proměnná je spojena s objektem, který ji zapouzdřuje. Úplné jméno proměnné "bla" spojené s objektem A je "A.lah", zatímco plné jméno proměnné "bla" spojené s objektem B je "B.lah". Každá z těchto proměnných může mít svou vlastní hodnotu. Pokud jsou objekty A a B stejného typu a je vytvořen jiný objekt tohoto typu, C, a objekt C bude mít také instanční proměnnou "bla", která může mít svou vlastní jedinečnou hodnotu.
Proměnné instance jsou často zaměňovány se statickými proměnnými, ale obě se výrazně liší. Na rozdíl od proměnných instance, jejichž každý objekt určitého typu má svůj vlastní, mají statické proměnné pouze jednu hodnotu a tato hodnota je stejná pro každý objekt příslušného typu. Statické proměnné se často nazývají proměnné třídy, které nejsou stejné jako proměnné instance.
V závislosti na vlastnostech viditelnosti, které jsou jim přiřazeny, mohou být proměnné instance viditelné pouze uvnitř konkrétního objektu, objektu a jeho podtříd, nebo objektu, ve kterém se nachází, jakož i jiných objektů. Tento konečný typ viditelnosti, nazývaný veřejná viditelnost, je často považován za špatnou praxi například u proměnných, protože je snadné porušit principy zapouzdření v objektově orientovaném programování. I přes toto tabu existují časy, ve kterých jsou proměnné ve veřejné instanci užitečné. Například mnoho standardních tříd v Javě má proměnné veřejné instance, což občas umožňuje snadnou úpravu vlastností.
Viditelnost proměnné instance také přichází do hry s dědičností. Pokud jedna třída zdědí od druhé, nedá to okamžitě oběma třídám přístup k proměnným instance druhé. Proměnné soukromé instance v nadtřídě a podtřídě zůstávají omezeny pouze na tyto třídy, takže nadtřída nevidí soukromou proměnnou v podtřídě a naopak. Jediné proměnné instance, které mohou vidět jak nadtřída, tak podtřída, jsou chráněné proměnné v nadtřídě.