Q:

About accessing child's variables or methods

I will make an example here. 
I'm aware that those methods in Thor Class will override the methods in Avengers Class. (I will skip the body of the methods)
Class Avengers{

   void hit(){
   }
   void walk(){
   }
}

Class Thor extends Avengers{

   void hit(){
   }
   void walk(){
   }
   void thunderSkill(){
   }
} 

and here is Main.
public static void main(String[] args) {
Avengers thor = new Thor();
}

If I do that, with 'thor' instance, I can access those hit() method and walk() method. But I can't access to thunderSkill() method. and I realized that only overriding methods can be accessed. My question is, is there any way to access the thunderSkill method without overriding thunderSkill in Parent class, Avengers class?
So if it has other heros, such as Thor, Iron man, Captain America...etc and they 
 all should have their own unique methods. and do these all unique methods need to be in the parent class, Avengers class if I'd like to access to it through the instance?
(I'm trying to set the data type of the instance to 'Avengers', so I can go easy on 'parameter' and 'argument'.)
I'm new to Java, please help me:)
Thank you guys!!

A:

The child class methods can not be accessed by the parent class reference. You can only call the overridden methods if you use Parent class reference. 
There are two options if you want to use the child class methods.
option 1: call the child method inside the Overridden method. ( the easy one )
Option 2: You can cast the Parent class reference with Child Class object and you can call the child class methods. Here is a sample code for option 2.
I suggest you to go through this java documentation about the inheritance.
https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
public class Parent {

    public void canSpeak() {
        System.out.println("I can speak");
    }

    public static void main(String[] args) {

        Parent p = new Child();
        p.canSpeak();

        // p.canRead()  // can not be accessed. because the refernece is parent.
        // if you want to access the canRead() method in child class, then you need to case the object.

        Child c = (Child)p;
        c.canRead();
    }
}

public class Child extends Parent {
    /**
     * This is the overridden method.
     */
    @Override
    public void canSpeak() {
        System.out.println("I can speak");
    }
    /**
     * Only child can read.
     */
    public void canRead() {
        System.out.println("I can read");
    }
}

