If you think about it, not being able to do this makes sense..
The reason is that you could pass the child object around as if it's the parent one (i.e you can use the parent type as the reference type to a TestClass instance).
e.g.
parent p = new TestClass();
There maybe some code elsewhere which uses parent
types and calls that method:
e.g.
public static void aMethod(parent aParent){
p.func();
}
If you were able to reduce the visibility of the method then calling aMethod(p)
would have to throw some kind of runtime exception - not allowing this ensures this is not required.