/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
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



Søg
Reklame
Statistik
Spørgsmål : 177416
Tips : 31962
Nyheder : 719565
Indlæg : 6407862
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste