you can extend an abstract class with an abstract class and choose to provide implementation of all, any or none of the abstract methods. it can be possible that you declare the subclass as abstract but implementetd all the methods, or you implemented few of the methods or none of the methods. ultimately there has to be a concrete class which implements all the methods .
Do I need to still repeat the abstract methods definition declared in the superclass to this class?
no you don't need to unless you want to provide an implementation for them. you can repeat them if you want but it will be like overriding without actually providing an implementation.
So I can extend an abstract class with an abstract class and I can choose if I want to provide implementation or just leave them to the superclass?
What happened when you tried it? Do you get compilation errors? ... Hands on learning, ie. just try it out, is arguably good here.
Thanks, and I did tried it out now as you said.
What Gurpeet said was right. Just a question though because while I was trying it out, the compiler seems not to be strict with parameters name when you implement them from the superclass. Why is that so? I changed the void turn(int whichType) to void turn(int fasd), and the compiler is good with that.
Parameter names does not matter. what matters is that rules of the overriding must be followed. and as per rules the name of method should be same and the parameter types should be of the same type. also the return type should be same or as of java 5 they should be of COVARIANT types.
also you need to keep in mind that overridding happens in context of inheritance. or you can say it is related to inheritance. if a method is accessbile in subclass then only you can override it with your sublcass specific implementation. what it means is that if you have
subject: Abstract class being extend by another abstract class, and finally being extends by a concrete class