Override
Когда метод, унаследованный подклассом от суперкласса, заменяется (переопределен) в подклассе.
class A {
void foo() {
/** definition A of foo */
}
}
class B extends A {
void foo() {
/** definition B of foo */
}
}
Теперь, если вы позвоните foo
, используя:
A a = new B();
a.foo();
Будет выполнено определение B
для foo
. Это не так интуитивно понятно, поскольку вы получите ошибку компиляции, если в классе A
не было метода с именем foo
. Таким образом, тип объекта a
, который является A
, должен иметь метод foo
, тогда вы можете вызывать его и метод foo
экземпляра будет выполнено, то есть класса B
, следовательно, 'время выполнения'.
Перегрузка
Когда вы создаете метод с тем же именем, что и существующий метод. Чтобы избежать ошибки времени компиляции, у вас есть для определения нового метода с параметрами, отличными от существующего. Таким образом, методы будут различимы. Имейте метод с тем же именем и параметрами, но другой тип возвращаемого значения все еще неопределенный и, следовательно, приведет к ошибке компиляции. Пример перегрузки:
class A {
void bar(int i) {}
// The following method is overloading the method bar
void bar(Object a) {}
// The following will cause a compile error.
// Parameters should differ for valid overload
boolean bar(int i) {
return true;
}
}