Note the difference between an object instance and a reference.
new Child();
instantiates (creates an instance of) the class Child. That means there is now an object (in the "heap") but you do not have direct access to that object, you have indirect access through references to it. Once the object is instantiated, you cannot change it's type.
Child ch;
defines a reference that has a Child interface, that by default refers to no object (IE: null)
Parent parent;
defines a reference that has a Parent interface.
Once these references exist, you can then assign them to objects using lines like:
parent = new Parent();
or
ch = new Child();
Because Child inherits from Parent (as others have said, it "is a" Parent), Parent references can also refer to Child objects. IE:
parent = new Child();
or
parent = ch;
but you will only be able to access the portions of the Child object that are defined by Parent through the Parent reference. Note that a cast is not necessary for this. However, you would need a cast going the other direction. That is, if it is still a Child object, but you only have a Parent reference so far, you need a cast to get a Child reference:
ch = (Child)parent;
or
ch = parent as Child;
The former will throw an exception if the cast cannot be performed. The latter will assign null to ch if the cast cannot be performed.