La classe concreta in Java è la classe predefinita ed è una classe derivata che fornisce le implementazioni di base per tutti i metodi che non sono già implementati nella classe base. L'opposto della classe concreta è la classe astratta, che non fornisce implementazioni per tutti i suoi metodi.
Gli utenti possono pensare alla classe astratta come classe che viene utilizzata come classe base e quindi la classe concreta è la classe che riempie tutte le funzionalità mancanti nella classe astratta.
Per aiutare le persone a capire meglio il concetto di classe concreta e classe astratta, il concetto di "classe" deve essere definito. Una classe è un membro di un pacchetto predefinito a meno che il suo file di origine contenga un'istruzione di pacchetto. Una classe è definita come astratta quando ha uno o più metodi astratti o non implementa tutti i metodi astratti della sua superclasse. Se una classe non ha un costruttore esplicito, è necessario utilizzare il costruttore predefinito. Le classi devono essere dichiarate pubbliche oppure saranno accessibili solo ai membri dello stesso pacchetto. Una classe può avere lo stesso nome di un'altra classe, ma solo se quelle due classi non condividono lo stesso pacchetto e solo se le due classi non vengono mai importate nello stesso file.