Matthew F. answered 04/05/19
Professional Software/ Web Developer Specializing in Java
Based on the question, I'm going to assume some prior knowledge of overriding methods and how that works, but if not here's a quick rundown.
The answer lies almost entirely in the access modifier of the method being overridden and the relationship between the subclass and the parent class. The "@Override" annotation is an example of run time polymorphism and can be used in a subclass to override a method with the same signature in the parent class, allowing the compiler to execute the overriden method in the subclass. But there are situations in which it works fine, may not work as intended, or may induce an error depending on scope, return type inheritance, or static, private, or final modifiers.
The annotation itself is not necessary at all, since a method with identical signature in the subclass will supersede the method of the parent class, but it does provide some nice features at runtime that help with tracing output when errors arise. Mostly it keeps you from shooting yourself in the foot. The @Override annotation will make sure that there is a method in the parent class that exists to be overwritten, and errors will appear if you try overriding something that isn't there at all, and code will not be compiled until the errors are resolved.