Zastępowanie vs Ukrywanie Javy - Confused

Jestem zdezorientowany tym, jak nadpisywanie różni się od ukrywania w Javie. Czy każdy może podać więcej szczegółów na temat tych różnic? CzytamSamouczek Java ale przykładowy kod nadal mnie mylił.

Żeby być bardziej zrozumiałym, rozumiem dobrze nadrzędność. Moim problemem jest to, że nie widzę, że ukrywanie jest inne, z wyjątkiem faktu, że jeden jest na poziomie instancji, a drugi na poziomie klasy.

Patrząc na kod samouczka Java:

public class Animal {
    public static void testClassMethod() {
        System.out.println("Class" + " method in Animal.");
    }
    public void testInstanceMethod() {
        System.out.println("Instance " + " method in Animal.");
    }
}

Następnie mamy kota podklasy:

public class Cat extends Animal {
    public static void testClassMethod() {
        System.out.println("The class method" + " in Cat.");
    }
    public void testInstanceMethod() {
        System.out.println("The instance method" + " in Cat.");
    }

    public static void main(String[] args) {
        Cat myCat = new Cat();
        Animal myAnimal = myCat;
        Animal.testClassMethod();
        myAnimal.testInstanceMethod();
    }
}

Potem mówią:

Wynik tego programu jest następujący:

Metoda klasowa w Animal.

Metoda instancji w Cat.

Dla mnie fakt, że wywołanie metody klasy testClassMethod () bezpośrednio z klasy Animal, wykonuje metodę w klasie Animal jest całkiem oczywiste, nic specjalnego. Następnie wywołują testInstanceMethod () z odwołania do myCat, więc znowu całkiem oczywiste, że wykonywana metoda jest tą w instancji Cat.

Z tego, co widzę, ukrywanie połączeń zachowuje się tak samo, jak nadpisywanie, więc po co to rozróżniać. Jeśli uruchomię ten kod przy użyciu powyższych klas:

Cat.testClassMethod();

Zdobędę:Metoda klasowa w Cat. Ale jeśli usunę testClassMethod () z Cat, to otrzymam:Metoda klasy w Animal.

To pokazuje mi, że pisanie metody statycznej, z tą samą sygnaturą, co w rodzicach, w podklasie prawie nie ma znaczenia.

Mam nadzieję, że wyjaśnię, gdzie jestem zdezorientowany i ktoś może rzucić trochę światła. Z góry dziękuję!

questionAnswers(13)

yourAnswerToTheQuestion