PDA

Visualizza la versione completa : [java & hashtable with extends]


lupo987
16-10-2003, 17:13
Ragazzi mi date una mano a capire una cosa dalla teoria se estendo una classe dalla mia allora dovrebbe essere facile riuscire ad utilizzare i metodi da cui estendo la classe sulla mia classe istanziando un oggetto della mia classe insomma ragazzi vi posto il codice e aspetto notizie:

import java.lang.*;
import java.util.Enumeration.*;
import java.util.*;
import java.text.*;
public class Ext extends Hashtable{
public Ext(){
Ext e=new Ext();
e.put(("one", new Integer(1));
e.put(("two",new Integer(2));
e.put(("three",new Integer(3));
Integer n = (Integer)numbers.get("two");
if (n != null){
System.out.println("two = " + n);
}

}
public static void main (String[] args){
Ext e= new Ext();
int l=e.size();
System.out.println("La size dell'hash e':"+l);

}
}

anx721
16-10-2003, 20:12
Quello che dici sull'estensione delle classi giusto, per il codice cha hai scritto contiene degli errori. A parte alcuni errori di sintassi, come qualche parentesi di troppo e un identificatore non dichiarato, c' un errore non sintattico e non rilevabile a tempo di compilazione, ovvero l'istruzione:



Ext e=new Ext();

Creando un nuovo oggetto Ext all'inerno del costruttore della classe Ext stessa dai vita ad una sequenza infinita di chiamate al costruttore di Ext, che solleva uno StackOverflowError. Il costruttore di una classe crea da s un'istanza della classe, proprio questo il compito del costruttore. Una versione corretta del tuo programma la seguente:




import java.lang.*;
import java.util.Enumeration.*;
import java.util.*;
import java.text.*;

public class Ext extends Hashtable{

public Ext(){

put("one", new Integer(1));
put("two",new Integer(2));
put("three",new Integer(3));
Integer n = (Integer)get("two");
if (n != null)
System.out.println("two = " + n);
}



public static void main (String[] args){
Ext e= new Ext();
int l=e.size();
System.out.println("La size dell'hash e':"+l);

}
}

Ciao.

lupo987
17-10-2003, 00:04
Guarda credo solo k nn ci siamo capito verro quello che hai detto tu.Ma io stavo chiedendo mai possibile che non esiste un modo per accedere ad un metodo della superclasse nella mia sottoclasse(Per esempio put nella superclasse Hashtable inserisci una coppia chiave/valore nell'hashtable).io creo la sottoclasse Ext estendendola dalla classe Hashtable e quindi vorrei fare in modo che la mia classe Ext potesse essere considerata da un futuro package e quindi da altre classi,come un hashtable e k le sue operazioni primarie potesse essere quelle di inserimento e cancellazione degli elementi contenuti dentro l'hashtable.Grazie per il chiarimento fattomi sul discorso del costruttore.

naighes
17-10-2003, 09:56
Originariamente inviato da lupo987
Ma io stavo chiedendo mai possibile che non esiste un modo per accedere ad un metodo della superclasse nella mia sottoclasse.

E perch non dovrebbe essere possibile?

Nel codice che ti ha postato anx721 viene eseguita la chiamata del metoto put, appartenente alla classe Hashtable, ma ereditato dalla tua classe Ext.

Il metodo lo puoi utilizzare tranquillamente e, oltretutto, ti permesso anche di sovrascriverlo.


Originariamente inviato da lupo987
...e quindi vorrei fare in modo che la mia classe Ext potesse essere considerata da un futuro package...

Sar sufficiente che tu, all'inizio del codice che ti ha postato anx721, aggiunga questo:


package pacchettoMieClassi;

E quando ne vuoi usufruire:


import pacchettoMieClassi.*;

anx721
17-10-2003, 17:09
Originariamente inviato da lupo987
io creo la sottoclasse Ext estendendola dalla classe Hashtable e quindi vorrei fare in modo che la mia classe Ext potesse essere considerata da un futuro package e quindi da altre classi,come un hashtable e k le sue operazioni primarie potesse essere quelle di inserimento e cancellazione degli elementi contenuti dentro l'hashtable

Estendendo Hashtable, la tua classe Ext a tutti gli effetti una Hashtable (anche qlcosa in +) e quindi puoi usare un'istanza di Ext ovunque sia richiesta una Hashtable, e puoi invocare su di essa ogni metodo che pu esere invocato su un' Hashtable. Ciao.

LeleFT
18-10-2003, 17:03
Originariamente inviato da anx721
Estendendo Hashtable, la tua classe Ext a tutti gli effetti una Hashtable (anche qlcosa in +) e quindi puoi usare un'istanza di Ext ovunque sia richiesta una Hashtable, e puoi invocare su di essa ogni metodo che pu esere invocato su un' Hashtable. Ciao.

:D Questo si chiama EREDITARIETA' :D


Originariamente inviato da naighes
Il metodo lo puoi utilizzare tranquillamente e, oltretutto, ti permesso anche di sovrascriverlo.

:D E questo si chiama POLIMORFISMO :D


Ciao.

Loading