/ / Overriding се равнява на метода от абстрактния клас и го определя като абстрактно, така че ако се разшири някакъв клас, те трябва да изпълняват - java, интерфейс, abstract-class, override, abstract-methods

Прехвърлянето се равнява на метода от абстрактния клас и се определя като абстрактно, така че ако се разшири някакъв клас, те трябва да въведат - java, интерфейс, абстрактен клас, override, abstract-methods

Опитвам се да изградя абстрактен клас / интерфейс, който заменя съществуващите методи и ги определя като абстрактни. Възможно ли е това?

Пример за код:

public abstract class Box {
@Override
public abstract boolean equals(Object o);
}

ИЛИ

public interface Box {
@Override
boolean equals(Object o);
}

И двата класа и интерфейсите по-горе трябва да имат една и съща функция, но това означава ли и заместване на Object equals метод? дори и да го задам като абстрактна?

Така ще работи:

public class Tea extends Box {
@Override
public boolean equals(Object o) {
// TODO Auto-generated method stub
return false;
}
}

Отговори:

0 за отговор № 1

Първо, интерфейсите не заменят методите. Така че не можете да пренебрегвате equals от Object чрез добавяне на equals метод към интерфейс. Вместо това интерфейсите могат да бъдат считани за договори, гарантирайки, че всеки нерефраструктурен клас, който ги прилага, ще има всички интерфейсни методи (пряко или чрез наследяване).

Що се отнася до избора на метод чрез наследяване, можете в действителност да направите това. Така че вашият пример за пренебрегване на equals метод с абстрактна дефиниция във вашия абстрактен клас на кутията ще доведе до разширяване на класовете Box да се наложи да се приложи equals метод.

И както @OskarEmilsson коментира, ако го направите, тогава би трябвало да наложите hashCode да бъдат изпълнени, тъй като равновесието и hashCode трябва да бъдат съвместими помежду си (равно на обектите трябва да имат еднакви hashCodes).