IntfX — это интерфейс в пакете A, содержащий метод public void op_a(Double e)
CIsY — это класс в пакете A, который реализует IntfX и переопределяет op_a.
В пакете B основной класс импортирует пакет A, расширяет CIsY и переходит к перегрузке. оп_а как public void op_a(Double e, Double f)
Теперь в блоке psvm есть два экземпляра: Intfx a = new Main() и Main b = new Main()
Их он продолжает вызывать a.op_a(Double e, Double f) и c.op_a(Double e, Double f)
The a.op_a вызов терпит неудачу. Он показывает ошибку времени компиляции «ожидается 1 аргумент, но найдено 2».
Мой вопрос: почему объекту не удается использовать перегруженный метод op_a с двумя аргументами? В других задачах, когда есть две версии метода, jvm отдает предпочтение объекту, а не типу.
Код:
` пакет А:
Код: Выделить всё
public interface IntfX {
public void op_a(Double a);
public void op_b(Double b);
}
Код: Выделить всё
public class CIsY implements IntfX {
protected double v = 0.0;
String p = null;
public CIsY(Double x, String b) {
v = x;
p = b;
}
public void op_a(Double a) {
v += a;
}
public void op_b(Double b) {
v -= b;
}
public void op_c() {
v = 0.0;
p = null;
}
}
Код: Выделить всё
import pack_a.*;
public class Main extends CIsY{
public static void main(String[] args) {
IntfX a = new Main();
CIsY b = new Main();
Men c = new Main();
c.op_a(0.5,0.8);
a.op_a(0.0, 0.1);
}
public Main() {
super(0.0, "");
}
public void op_a(Double e, Double f) {
v = e + f;
}
public void op_b(Double e, Double f) {
v = e + f;
}
public void op_K(Double d) {
v = d;
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... overloaded