My question involves specifically Java, abstract classes, and the use of protected data. I am being told that all the data should be private, and protected getters/setters
Information hiding is valuable, even among classes related by inheritance.
In addition to allowing re-implementation, as noted by alex above: