Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    Creare un'istanza di una classe astratta, è possibile?

    Buon pomeriggio a tutti,
    stavo studiando il pattern DAO, e girando x la rete è saltato fuori questo sorgente:
    codice:
    package it.un.sls.sampleproject.dao;  
    
    public abstract class DAOFactory { 	 	// --------------------------------------------------------------------------- 	 	public static DAOFactory getDAOFactory(String whichFactory) { 		
    try { 			
    return (DAOFactory) Class.forName(whichFactory).newInstance(); 	
    } catch (ClassNotFoundException e) {
     	 // TODO Auto-generated catch block 			
           e.printStackTrace(); 		
    	return null; 		}
     catch (InstantiationException e) { 		
    	// TODO Auto-generated catch block 			     
               e.printStackTrace(); 	
    	 return null; 	
    	} catch (IllegalAccessException e) { 	
    		// TODO Auto-generated catch block 
    			e.printStackTrace(); 		
            	return null; 		} 
    	} 	 	// --------------------------------------------------------------------------- 	 	public abstract AuthorDAO getAuthorDAO(); 
    public abstract BookDAO getBookDAO(); 	
    public abstract PublisherDAO getPublisherDAO(); 	 }
    Come ben potete osservare all'interno di questa classe esiste un metodo statico che non fa altro che creare un oggetto di questa classe, ... come è possibile? Che io sappia non si può creare un'istanza di una classe astratta in quanto appunto presenta dei metodi astratti...
    Mi date qualche input per favore?

  2. #2

    Moderazione

    Java ha una sezione apposita, sposto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    codice:
    return (DAOFactory) Class.forName(whichFactory).newInstance();
    No non è vero che crea un ogetto DAOFactory ma bensi un oggetto di tipo "wichFactory" e poi effettua un casting esplicto a DAOFactory, si deduce che la "wichFactory" deve essere un sottoclasse "concreta" di DaoFactory.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    In realtà non creerà un'istanza di tale classe, ma di una sua sottoclasse (non abstract), il cui nome viene passato al metodo e, tramite riflessione, istanziato.

    Una cosa che si chiama ereditarietà dice che se una classe X deriva da una classe Y, allora tutte le istanze della classe X sono anche istanze della classe Y (esempio, Quadrato deriva da Figura, allora un'istanza qualsiasi di Quadrato sarà anche una Figura, ovviamente), quindi quel metodo statico non fa altro che creare un oggetto di una classe il cui nome è nella stringa "whichFactory", che sarà ovviamente una sottoclasse di DAOFactory, pena il sollevarsi di un'eccezione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.