Newsgroup: it.comp.java
Titolo: costruttori

ho due classi così definite:
public class A{
protected int x;
private int y;
//A non contiene altri campi
public A(int h){//unico costruttore definito nella classe
y = h;
}
e la sottoclasse
public class B extends A {
private int x;    //unico campo di B
public B(){...}//inizializza x ad 1 ed i campi di A a 0
public B(int n) {...}    //inizializza x e i campi di A ad n
public B (int n, int h, int k}    //inizializza x al valore di n, ed i campi 
di A a campo x = h, campo y = k
e devo scrivere il codice dei costruttori di B. Ho fatto così:
public B (){
this.x=1;
super(0)
}
public B(int n){
this.x=n
super(n)
}
public B (int n, int h, int k){
this.x=n
A.x=h
//y non posso inizializzarlo in quanto è dichiarato private
ora non so se quanto ho fatto è giusto, in quanto quando invoco il 
costruttore di A, questi non tocca la variabile x, o sbaglio? Come sono i 
costruttori corretti di B?
Ed inoltre, è possibile definire una sottoclasse di A senza alcun 
costruttore definito? Come faccio ad avere un costruttore che inizializza 
tutti i campi a 0 ?
Grazie per aver avuto la pazienza di leggermi fin qui.... ringrazio 
anticipatamente chiunque sappia darmi qualche delucidazione.
Grazie mille
S.
-- 
Computer Science is no more about
computers than  astronomy is about
telescopes.
::[E. W. Dijkstra] 

sbrecche wrote:[..]
Ciao sbrecche.
Premetto una breve discussione sui costruttori in java.
Le regole dei costruttori sono le seguenti:
Le classi vengono istanziate risalendo la gerarchia dei costruttori.
Ogni classe ha un costruttore che tu lo metta o meno (se non metti un 
costruttore, java te ne fornisce uno di default).
Ogni classe chiama il costruttore del padre sempre e ovunque. Il padre 
di tutti gli oggetti è la classe Object.
Quindi supponiamo di avere le seguenti classi:
class Padre{}
class Figlio extends Padre{}
java inserirà nel codice compilato:
class Padre{
	public Padre(){
		super();
	}
}
class Figlio extends Padre{
	public Padre(){
		super();
	}
}
quindi se istanzi Figlio questo chiamerà il costruttore di Padre che a 
sua volta chiamerà quello di Object.
Se però tu fornisci un costuttore ad una classe, java non ne fornirà 
alcuno di default:
Supponiamo quindi:
class Padre{
//java non inserisce costruttore
//siccome ne esiste già uno (in questo caso due).
	public Padre(int a){}
	public Padre(int a, int b){}
}
//classe senza costruttore
class Figlio extends Padre{}
a questo punto java non può sapere quale costruttore padre chiamare dal 
costruttore di default generato dalla classe Figlio: chiama quello con 
uno o due argomenti?
Per questo motivo devi dare alla classe Figlio un costuttore che deve 
chiamare esplicitamente il costruttore padre super(1) oppure super(1,2)
cioè:
class Figlio extends Padre{
	public Figlio(){
		super(1);
	}
}
Una regola da tener ben presente è che la PRIMA riga di un costuttore 
deve essere super() o this() qualora dovessi inserirli.
Per chiamare un campo d'istanza del padre devi usare super.campo (sempre 
  che quello sia almeno protected).
Per quanto riguarda il tuo problma credo si debba risolvere in questo modo:
class A{
     protected int x;
     private int y;
     //i campi di A a 0
     public A(){
         //anche se di default x,y hanno già 0 essendo interi primitivi.
         x = 0;
         y = 0;
     }
     public A(int x, int y){
         this.x = x;
         this.y = y;
     }
}
class B extends A{
     private int x;
     //inizializza x ad 1 ed i campi di A a 0
     public B (){
         super();
         x = 1;
     }
     //inizializza x e i campi di A ad n
     public B(int n){
         super(n,n);
         x = n;
     }
//inizializza x al valore di n, ed i campi di A a campo x = h, campo y=k
     public B (int n, int h, int k){
        super(h,k);
        x = n;
     }
}
Spero sia stato abbastanza chiaro.
Ciao,
Kimbuba.

sbrecche wrote:[..]













class A{
     protected int x;
     private int y;
     //i campi di A a 0
     public A(){
         //anche se di default x,y hanno già 0 essendo interi primitivi.
         x = 0;
         y = 0;
     }
     public A(int x, int y){
         this.x = x;
         this.y = y;
     }
}
class B extends A{
     private int x;
     //inizializza x ad 1 ed i campi di A a 0
     public B (){
         super();
         x = 1;
     }
     //inizializza x e i campi di A ad n
     public B(int n){
         super(n,n);
         x = n;
     }
//inizializza x al valore di n, ed i campi di A a campo x = h, campo y=k
     public B (int n, int h, int k){


sbrecche wrote:[..]













class A{
     protected int x;
     private int y;
     //i campi di A a 0
     public A(){
         //anche se di default x,y hanno già 0 essendo interi primitivi.
         x = 0;
         y = 0;
     }
     public A(int x, int y){
         this.x = x;
         this.y = y;
     }
}
class B extends A{
     private int x;
     //inizializza x ad 1 ed i campi di A a 0
     public B (){
         super();
         x = 1;
     }
     //inizializza x e i campi di A ad n
     public B(int n){
         super(n,n);
         x = n;
     }
//inizializza x al valore di n, ed i campi di A a campo x = h, campo y=k
     public B (int n, int h, int k){


sbrecche wrote:[..]













class A{
     protected int x;
     private int y;
     //i campi di A a 0
     public A(){
         //anche se di default x,y hanno già 0 essendo interi primitivi.
         x = 0;
         y = 0;
     }
     public A(int x, int y){
         this.x = x;
         this.y = y;
     }
}
class B extends A{
     private int x;
     //inizializza x ad 1 ed i campi di A a 0
     public B (){
         super();
         x = 1;
     }
     //inizializza x e i campi di A ad n
     public B(int n){
         super(n,n);
         x = n;
     }
//inizializza x al valore di n, ed i campi di A a campo x = h, campo y=k
     public B (int n, int h, int k){


sbrecche wrote:[..]













class A{
     protected int x;
     private int y;
     //i campi di A a 0
     public A(){
         //anche se di default x,y hanno già 0 essendo interi primitivi.
         x = 0;
         y = 0;
     }
     public A(int x, int y){
         this.x = x;
         this.y = y;
     }
}
class B extends A{
     private int x;
     //inizializza x ad 1 ed i campi di A a 0
     public B (){
         super();
         x = 1;
     }
     //inizializza x e i campi di A ad n
     public B(int n){
         super(n,n);
         x = n;
     }
//inizializza x al valore di n, ed i campi di A a campo x = h, campo y=k
     public B (int n, int h, int k){


sbrecche wrote:[..]













class A{
     protected int x;
     private int y;
     //i campi di A a 0
     public A(){
         //anche se di default x,y hanno già 0 essendo interi primitivi.
         x = 0;
         y = 0;
     }
     public A(int x, int y){
         this.x = x;
         this.y = y;
     }
}
class B extends A{
     private int x;
     //inizializza x ad 1 ed i campi di A a 0
     public B (){
         super();
         x = 1;
     }
     //inizializza x e i campi di A ad n
     public B(int n){
         super(n,n);
         x = n;
     }
//inizializza x al valore di n, ed i campi di A a campo x = h, campo y=k
     public B (int n, int h, int k){


Oops.
Il mio client di posta è impazzito..

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.

 Kimbuba.
Chiarissimo, grazie tantissime anche per la pazienza :)
Ciao
S.



 Anche il mio
Vedo che anche tu hai fastweb... fa solo casini