abstract
Il modificatore abstract può essere applicato nella dichiarazione di classi e di metodi.

Classi astratte:
L'utilizzo di abstract nella dichirazione di una classe è utile quando in una gerarchia di classi si individua una superclasse che opera come riferimento per tutte le altre classi, e si pensa di utilizzare soltanto le sue sottoclassi. Le classi astratte non possono essere istanziate, ma possono contenere tutto quanto può contenere una classe normale ed in più metodi astratti, cioè metodi dicharati privi di implementazione. Una sottoclasse che eredita da una classe astratta deve implementare tutti i metodi dichiarati abstract altrimenti sarà anche essa classe astratta. Una classe dichiarata con abstract è definita astratta.

Metodi astratti:
Un metodo astratto è un metodo privo di implementazione. In pratica viene definito solo il suo prototipo, è compito della sottoclasse implementare corretamente il metodo. Solo le classi astratte e le interfacce possono contenere metodi astratti.
Vedere anche: class
Esempio: 
public abstract class ClasseAstratta { 
    int i = 1; 
    ... 
    public abstract int metodoDaImplementare(); 
    public void metodoConcreto() { 
        i ++; 
    } 
}