use override & final for code safety