class A {
int a;
int b;
A(int i,int z) {
a = i;
}
void abc() {
System.out.println("a is " + a);
System.out.println("b is " + b);
}
}
class B extends A {
int a = 55;
int b = 66;
B() {
super(14,13);
super.b = 99;
}
}
public class test {
public static void main(String[] argue) {
B obj = new B();
obj.abc();
}
}
uscita:
a is 14
b is 99
Vorrei fare riferimento al codice precedente per le mie domande. Non ho alcuni concetti OOP di base vividi. Per favore, chiarisci i miei dubbi riguardo alle seguenti domande:
- Che cosa è successo realmente quando la classe B ha esteso A? Il codice di A copiato in B, ogni variabile definita in A è ora definita anche in B e ogni definizione di metodo in A è ora anche in B?
- Poiché una classe è solo un modello, elenca gli attributi che l'oggetto avrà e la memoria verrà allocata solo per ogni definizione di variabile in una classe quando viene creato l'oggetto. Ora se dici che quando la classe B ha esteso A il codice dalla classe A non è stato copiato in B, cioè le variabili (int a, int b) originariamente definite in A, le loro definizioni non sono incollate nella classe B. Quando l'oggetto della classe B viene creato alloca la memoria per le variabili 'a' e 'b' nella classe B, non di classe A, poiché la loro definizione non viene copiata in B. Come può la classe B usare le variabili di super classe 'a' e 'b' anche se la super classe non è stata istanziata, ovvero 'a' e 'b' non esistono in memoria poiché la classe definisce semplicemente un modello. Il compilatore alloca parti di memoria separate per 'a' e 'b' su considerazioni speciali per la classe B in quanto ha esteso la classe A? Che dire del metodo definito nella classe A?
-
Mi aspettavo obj.abc () ( l'ultima istruzione nel metodo principale ) da stampare:
a is 55 b is 66
come il metodo abc () era originariamente definito in classe A e ora la classe B eredita A, quindi ha ereditato abc (). Quindi, se avessi chiamato abc () con un riferimento dell'oggetto della classe B, avrebbe dovuto stampare i valori di 'a' e 'b' nella classe B i.e.
a is 55 b is 66