Jimmy Clark wrote:You are welcome. Yes, the abstract keyword may be ommitted from the source code. The language designers were flexible. But, things are different inside the JVM and before compiling your class, the code signal for abstract will be added to the compiler input. Will it make any difference? Not one that a human can detect. However, always remember that an interface class ISA type of abstract class.
There's no real difference between "abstract interface" or "interface". I'd recommend to always use "interface", as it results in cleaner and more readable code.
Jimmy Clark wrote:Having an AbstractDog class in the middle is good design and may turn out to be useful especially if there will be multiple ConcreteDog classes needed in the future.
Creating scaffolding for classes that may be needed in the future is rarely a sign of a good design. Create what is needed now, and give yourself a possibility of extending this solution in the future. AbstractDog can be easily inserted to the class structure when necessary, so I'd postpone creation of this class until that time.