"the new keyword explicitly hides a member inherited from a base class. Hiding an inherited member means that the derived version of the member replaces the base-class version." (C# Lang Ref)
"Hides the child method from the parent method" is probably not precise.
The child method
replaces the parent method entirely. The inheritance chain is stopped. In a certain sense, the parent method is now "hidden" to you child class.
A contrived example based on something I came across once is setting a static value (note: this is not good design, just an example):
-
public abstract class CheckingAccount{
-
public static int StartValue = 250;
-
}
-
All my derived classes would share that StartValue. If I change it in one class:
-
public class DadsCheckingAccount : CheckingAccount{
-
public DadsCheckingAccount(){
-
StartValue = -1;
-
}
-
}
-
it is now changed for all my classes.
However, if for one derived class I declare
-
public class DadsCheckingAccount : CheckingAccount{
-
new public static int StartValue = 500;
-
}
-
it is now changed just for DadsCheckingAccount without affecting other CheckingAccount derived classes.