| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | 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
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |