public class TestOverriding { private static class Parent { String getName() { return "Parent"; } } private static class Child extends Parent { @Override String getName() { return "Child"; } } public static void main(String[] args) { Parent child = new Child(); // Prints "Child" System.out.println(child.getName()); } }
Overload - перегрузка - объявление методов (или конструкторов) с одинаковыми именами, но разными с сигнатурами. Пример - все конструкторы любого класса, если их больше одного. В Java выбор выполняемого метода при перегрузке происходит статически (во время компиляции) и не зависит от типа объекта в рантайме:
import java.util.Collection; import java.util.HashSet; import java.util.Set; public class TestOverloading { static void classifyCollection(Collection c) { System.out.println("Collection"); } static void classifyCollection(Set s) { System.out.println("Set"); } public static void main(String[] args) { Collection c = new HashSet