Can a method in sub class overloading a method in super class?

Taking a more formal approach, the Java Language Specification for Java 7 states:

If two methods of a class (whether both declared in the same class, or both inherited by a class, or one declared and one inherited) have the same name but signatures that are not override-equivalent, then the method name is said to be overloaded.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.9

I would point your friend to this link.

So, in short, in your example, the hello method is indeed overloaded.


Simple Explanation:

I think this question arises because at times we hear the following,

"Method overloading is performed within class. Method overriding occurs in two classes that have inheritance relationship."

The above statement is correct. But your friend is wrong. why?

Because when you extend a class, the subclass have all the methods defined by superclass. It is as if all the methods of superclass have been implemented by the subclass. That means the hello() method has been implemented by the class C as well. Now, you added a method in class C with different parameter (hello(String s)). That means, class C has two methods in all with same name but different parameters and that is "overloading".

Hope it is crystal clear.