Хорошо, поэтому я не уверен, что этот вопрос уже существует, потому что я не знаю, как его отформатировать, но вот в чем проблема: может ли один и тот же метод производить другой результат в зависимости от конструктора? (Приносим извинения, если я повторяю вопрос или если это глупый вопрос.)Как переопределить метод в зависимости от конструктора?
Например, у меня есть интерфейс MyInterface
с функцией public void foo();
. Скажем, у нас есть класс:
public class MyClass implements MyInterface {
public MyClass() {
// I want foo() to print "Empty constructor" with sysout.
}
public MyClass(int x) {
// I want foo() to print "Constructor with int" with sysout.
}
}
Так что теперь, если создать две ссылки MyClass mc1 = new MyClass();
и MyClass mc2 = new MyClass(5);
, а затем вызвать mc1.foo();
и mc2.foo();
, результат должен быть:
пустой конструктор.
Конструктор с инт.
Я пробовал с new MyInterface { @Override public void foo() { ... } }
внутри конструкторов, но, похоже, не работает.
Итак, вы хотите использовать разные методы? Защитная переменная? Два разных класса – Emz
Вы делаете это для удовольствия? В чем смысл? –
Короткий ответ да, но вам нужно написать код, например, вы можете использовать поле экземпляра 'private Integer value;', в вашем конструкторе 'public MyClass (int x)' вы должны назначить значение 'x' на 'значение'; 'value = x'.Затем в 'foo' будет проверять' значение', чтобы увидеть, было ли оно «null» или нет; 'if (value == null)', когда 'value' является' null', вы должны печатать 'Empty constructor.', когда это не так, вы можете напечатать' Constructor with int''; в качестве примера – MadProgrammer