Мне любопытно узнать, что является лучшей практикой / соглашением SE по обработке возвращаемого типа методов, реализующих интерфейс. В частности, предположим, что мы реализуем простое дерево с таким интерфейсом:
public interface ITreeNode {
public ITreeNode getLeftChild();
public ITreeNode getRightChild();
public ITreeNode getParent();
}
И у нас есть класс TreeNode, который реализует это:
public class TreeNode implements ITreeNode {
private TreeNode LeftChild, RightChild, Parent;
@Override
public ITreeNode getLeftChild() {
return this.LeftChild;
}
@Override
public ITreeNode getRightChild() {
return this.RightChild;
}
@Override
public ITreeNode getParent() {
return this.Parent;
}
}
У меня такой вопрос ... должен ли тип возвращаемых данных соответствующих реализованных методов быть ITreeNode или TreeNode и почему.
Eclipse автоматически заполняет методы TreeNode типом возврата ITreeNode. Однако изменение его на TreeNode не вызовет никаких ошибок или предупреждений даже с флагом @Override.