Newsgroup: it.comp.java
Titolo: un pò di domande per avvicinarsi a java





- 
Cos'è un'interfaccia Java e cosa 
la distingue da una classe? Perché in un'interfaccia Java non è possibile 
definire metodi e campi privati? 


- Java permette 
l'ereditarietà multipla? Se sì, perché?


- 
Quali 
tipi di Java non sono oggetti (non sono istanza di classe). Qual è la radice 
della gerarchia per le classi di tutti gli altri 
oggetti?


 


grazie,


Francesco



 per le classi di tutti gli altri oggetti?
No l'ereditarietà multipla è estremamente delicata da gestire in 
soldoni non puoi estendere due classi contemporaneamente...se non 
ricordo male la cosa è permesa in  C++
Ovviamente posso averti detto una collezione di stronzate nel qual caso 
chiedo venia!
-- 
ô~ThEgAmEr~ô su uni7 alleanza  Kult Underground
  1011010     C   xthegamerx
  1001111     O         su
  1001111     O    
gmail.com
  1010010     L
Dicono che dietro ad un grande uomo c'e' sempre una grande donna...ma 
al contrario non e' meglio???

 Quali tipi di Java non sono oggetti
Credo nessuno. Ma sarei curioso di sapere il perchè di questa domanda.
AS

> la radice della gerarchia per le classi di tutti gli altri oggetti?
T> No l'ereditarietà multipla è estremamente delicata da gestire in
T> soldoni non puoi estendere due classi contemporaneamente...se non
T> ricordo male la cosa è permesa in C++
In C++ è permessa ma non è definita una soluzione a questo problema:
Classe A che ha il metodo virtuale pippo();
Classe B e C che derivano da A, ciascuna fa la sua override di pippo();
Classe D che non implementa pippo();
Semigraficamente (da cui il nome di ereditarietà a diamante):
             A
            / \
           /   \
          B     C
           \   /
            \ /
             D
Cosa succede quando viene invocato  d.pippo() ? La cosa non è definita
chiaramente   e   a  quanto   ricordo   del   Gosling  dipende   dalla
implementazione.
Comunque ci sono casi in  cui sarebbe legittimamente richiesto che una
classe C ne estenda due, A e B.  
In questo caso, almeno per  "l'esterno", una soluzione è 
* dichiarare una interfaccia Bp che implementi i metodi pubblici di B,
* dichiarare  C  in modo  da  estendere  la  classe A  e  implementare
  l'interfaccia Bp
* dichiarare una variabile  privata di C di tipo  Bp cui assegnare una
  istanza di  un oggetto che  implementa Bp (ad  esempio di tipo  B) e
  delegare a  tale oggetto l'implementazione dei metodi(*)  di cui non
  si intende fare l'override.
  (*)   ovvero  il   metodo  C.pippo()   di  tipo   Untipo  dichiarato
  dall'interfaccia Bp viene implementato come:
               Untipo public pippo() {
                  return oggettoDiTipoBp.pippo();
               }      
  dove oggettoDiTipoBp è l'oggetto privato di cui sopra.
In  questo caso problemi  di ereditarietà  a diamante  vengono risolti
esplicitamente  dal programmatore  indicando se  utilizzare  il metodo
ottenuto per estensione di  una superclasse oppure quello dell'oggetto
cui si delega l'implementazione.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e allevatore di bug da competizione

Credo nessuno. Ma sarei curioso di sapere il perchè di questa domanda.
 i tipi primitivi: char, int, float, byte, short, double
E' una domanda posta in un compito universitario ed ero curioso, tutto qua.


anche gli array direi 

cicap ha scritto:

no, gli array sono oggetti. I primitivi sono solo byte short int long
float double char e boolean