que es una clase abstracta en java