Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    493

    JAVA: interfacce o class astratte

    Ciao e tutti e buone feste.
    Sto' frequentando un corso di Java e dopo ore di corso (circa 30) mi sento molto demoralizzato. Piu' vado avanti e meno ci capisco. Vah beh
    Vorrei porvi una domanda: che differenza c'e' tra una classe astratta e una interfaccia? Quando uso l'una o l'altra?
    Grazie mille e ciao

  2. #2
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao.
    Allora una classe astratta ha dei metodi implementati e altri metodi non implementati; un'interfaccia, al contrario, ha solo le dichiarazioni dei metodi. Ad esempio:


    public interface MyInterface {

    public void dimmiCiao();
    public String hola();
    public Object getObject();
    }




    public abstract class MyAbstractClass {
    public MyAbstractClass() {
    }
    public abstract void dimmiCiao();
    public abstract String hola();
    public abstract Object getObject();

    }


    Come vedi la classe astratta ha solo la dichiarazione dei metodi il che equivale a dire che tutte le classi che estenderanno questa astratta dovranno implementare i metodi da essa dicharati. Lo stesso vale per le interfacce. Il problemma delle classi, però, è legato al fatto che, in Java almeno, l'ereditarietà è singola quindi se una classe estende già una superclasse non può estenderne un'altra. Cioè non è possibile fare:

    public class ClasseFiglia extends
    Prova,MyAbstractClass .......


    Per ovviare a ciò possiamo introdurre le interfacce; infatti una classe può estendere una ed una sola superclasse ma può implementare tutte le interfacce che vuole; cioè è possibile fare:

    public class ClasseFiglia extends MyAbstractClass implements MyInterface, YourInterface ......

    Diciamo che l'uso delle interfacce è utile per raggruppare delle classi che abbiano delle caratteristiche simili; le classi astratte, invece, ti aiutano qualora ci fosse una classe talmente generale che non sarebbe possibile rappresentare. Ti faccio un esempio stupidissimo.
    Supponiamo ad esempio di riferirci al concetto di auto; ora è vero che tutte le auto hanno 4 ruote ma è anche vero che non tutte hanno lastessa velocità; allora cosa potresti fare.... creare una classe astratta in cui faresti una cosa del tipo:


    public abstract class Auto{

    private int numRuote;
    public Auto() {
    }

    public void setNumRuote( int valore ){
    this.numRuote = valore;
    }


    public int getNumRuote( ){
    return numRuote;
    }

    public abstract void calcolaVelocita();
    }


    In tal caso se hai una 500 farai:

    public class 500 extends Auto(){

    public void calcolaVelocita(){

    System.out.println( "La 500 va max a 160 Km" );
    }
    }


    Nel caso di una ferrari:

    public class Ferrari extends Auto(){

    public void calcolaVelocita(){

    System.out.println( "La ferrari va ben oltre i 160 Km" );
    }
    }


    Spero sia stato chiaro e di non averti confuso ancora di + le idee.. ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

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 © 2024 vBulletin Solutions, Inc. All rights reserved.