Well Thangaraj this is a unique kind of a problem. This is why you had to wait for two days. And this is also not a perfect solution that I am providing. I compiled your codes and it gives this error message
name clash: <T>say() in Child and say() in Parent have the same erasure, yet neither overrides the other.
In both the second and the third code, the error is similar. Somehow the compiler is not able to deduce that the say method in Child class is overriding the say method in Parent class. So it says that they have the same name but say in child doesn't override say in Parent.
I also tried to add an @Override annotation, but that too gives an error that no method is being overriden. the 2nd example is especially shocking. You have just added a <T> and haven't even used it anywhere. But still the compiler gives a warning.
I read through Generics FAQ by Angelika Langer, and it says on page 466
a class (subclass in this case) must not have methods with identical erasures
The FAQ also states that a non-generic method can override a generic method but not vice versa, as is happening in your case.
So basically you have to memorize it for now. If I get a reason for this behavior, I will definitely help you.
thank you very much... Actually I am preparing For scjp just finished reading the kathy sierra bert bates... now next what i want to do... what type of mock exam i want to take.. can you give some valuable sites for mock test.