|  | 		    
					
        
         
          
         
	
          | |  | Instansvariable uden et objekt? Fra : Peter Christensen
 | 
 Dato :  24-11-06 15:29
 | 
 |  | 
 Jeg sidder med et eksempel fra edb-hæfte om Java-programmering (Start på
 Java 2), som rigtigt undrer mig. Det handler om nedarvning.
 
 Her er først et eksempel på et par Java-klasser, som jeg ville have skrevet
 dem. Jeg ville erklære både variable og metoder med static. Det vil sige, at
 jeg ville erklære x, y og z som klasse-variable og metode() som
 klasse-metode. Her er det, og det virker:
 
 class Hest {
 static int x,y,z;
 public static void metode() {
 System.out.println(z);
 }
 }
 
 class Foel extends Hest {
 public void afkom() {
 x = 13;
 y = 14;
 z = x + y;
 metode();
 }
 }
 
 public class Nedarv {
 public static void main(String args[]) {
 Foel araber = new Foel();
 araber.afkom();
 }
 }
 
 Sub-klassen Føl kan uden problemer tilgå klasse-variable og klasse-metoden i
 super-klassen Hest. -Det der undrer mig, er at også følgende program virker
 fint:
 
 class Hest {
 int x,y,z;
 public void metode() {
 System.out.println(z);
 }
 }
 
 class Foel extends Hest {
 public void afkom() {
 x = 13;
 y = 14;
 z = x + y;
 metode();
 System.out.println(super.x); // Virker fint
 // Hest h; h = ?...
 }
 }
 
 public class Nedarv2 {
 public static void main(String args[]) {
 Foel araber = new Foel();
 araber.afkom();
 }
 }
 
 Her er hverken variable eller metoden i klassen Hest erklæret som
 klasse-variable. D.v.s. her har jeg ikke brugt 'static'. Jeg undrer mig over
 hvordan programmet også kan tilgå instansvariable i klassen Hest, da jeg
 ikke har oprettet noget objekt fra denne klasse. Der er kun erklæret et
 objekt af klassen Føl.
 
 Hvis et objekt af klassen Hest alligevel er blevet skabt (automatisk?) da
 Føl-objektet blev oprettet, hvordan får jeg så tilgang til dette objekt? Jeg
 mener, objektet Hest h = ??.
 
 Hvis der er nogle, der lige kan gennemskue det her, ville jeg blive meget
 glad. Det forvirrer mig en del lige i øjeblikket...
 
 MVH og på forhånd tak,
 PC
 
 
 
 
 
 |  |  | 
  Arne Vajhøj (24-11-2006) 
 
	
          | |  | Kommentar Fra : Arne Vajhøj
 | 
 Dato :  24-11-06 16:08
 | 
 |  | Peter Christensen wrote:
 > Jeg sidder med et eksempel fra edb-hæfte om Java-programmering (Start på
 > Java 2), som rigtigt undrer mig. Det handler om nedarvning.
 >
 > Her er først et eksempel på et par Java-klasser, som jeg ville have skrevet
 > dem. Jeg ville erklære både variable og metoder med static. Det vil sige, at
 > jeg ville erklære x, y og z som klasse-variable og metode() som
 > klasse-metode. Her er det, og det virker:
 >
 > class Hest {
 >   static int x,y,z;
 >   public static void metode() {
 >     System.out.println(z);
 >   }
 > }
 
 Jeg er *meget* skeptisk overfor om de static skal være der.
 
 De skal ikke vær eder hvsi x,y,z,metode relaterer sig til en
 enkelt hest.
 
 > class Foel extends Hest {
 >   public void afkom() {
 >     x = 13;
 >     y = 14;
 >     z = x + y;
 >     metode();
 >   }
 > }
 >
 > public class Nedarv {
 >   public static void main(String args[]) {
 >     Foel araber = new Foel();
 >     araber.afkom();
 >  }
 > }
 >
 > Sub-klassen Føl kan uden problemer tilgå klasse-variable og klasse-metoden i
 > super-klassen Hest. -Det der undrer mig, er at også følgende program virker
 > fint:
 >
 > class Hest {
 >   int x,y,z;
 >   public void metode() {
 >     System.out.println(z);
 >   }
 > }
 >
 > class Foel extends Hest {
 >   public void afkom() {
 >     x = 13;
 >     y = 14;
 >     z = x + y;
 >     metode();
 >     System.out.println(super.x); // Virker fint
 >     // Hest h; h = ?...
 >   }
 > }
 >
 > public class Nedarv2 {
 >   public static void main(String args[]) {
 >     Foel araber = new Foel();
 >     araber.afkom();
 >   }
 > }
 >
 > Her er hverken variable eller metoden i klassen Hest erklæret som
 > klasse-variable. D.v.s. her har jeg ikke brugt 'static'. Jeg undrer mig over
 > hvordan programmet også kan tilgå instansvariable i klassen Hest, da jeg
 > ikke har oprettet noget objekt fra denne klasse. Der er kun erklæret et
 > objekt af klassen Føl.
 >
 > Hvis et objekt af klassen Hest alligevel er blevet skabt (automatisk?) da
 > Føl-objektet blev oprettet, hvordan får jeg så tilgang til dette objekt? Jeg
 > mener, objektet Hest h = ??.
 
 Det er netop en af pointerne ved arv at foel arver alt fra hest.
 
 Du kan skrive:
 
 Foel araber = new Foel();
 araber.metode();
 
 eller
 
 Hest araber = new Foel();
 araber.metode();
 
 som du har lyst til.
 
 Arne
 
 
 
 
 |  |  | 
 |  |