Встретил в задании такой интерфейс
public interface Planet {
static String SUN = "sun";
static String MOON = "moon";
static String EARTH = "earth";
}
у меня вопрос, какая разница будут ли константы статические или не статические ?
0
Комментарии (10)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Кто силен в английском? Не могу понять смысл одного из правил переопределения методов, объявленных в интерфейсе. Взято тут.
Checked exceptions should not be declared on implementation methods other than the ones declared by the interface method or subclasses of those declared by the interface method.
Спасибо. Но я бы хотел получить максимально точный перевод.
Я это перевел так: Проверяемое исключение не пожет быть объявлено в реализации метода, если оно, или его наследник не были обявлены в методе интерфейса. Я близок к истине?
Т.е. такой код
public interface IFace {
void someMethod() throws Exception;
}
public class Impl implements IFace {
void someMethod() throws Exception {
/* Реализация*/
}
}
не нарушает это правило?
Но я никогда не видел, чтобы иключения упоминались в интерфейсах.
у меня еще вопрос не про интерфейсы, статические переменные объявленные в классе, инициализируются при любом условии? то есть допустим есть класс Main и класс Cat, в классе Main есть метод main, то есть точка входа и этот класс никак не связан с классом Cat, ни наследует ни создает обькты ничего, статические переменные в классе Cat всеравно инициализируются или инициализация произойдет только через вызов, допустим Cat.catscount?;
Судя по результатам отладчика переменная b не инициализируется если закоментировать строку 1
<code>
public class A {
public static void main(String[] args) {
System.out.println("start");
System.out.println(Const.b); // 1
}
}
class B {
static String b = "b";
}</code>
Все поля в интерфейсах даже если это не сделано явно становятся static final.
А вообще использовать интерфейс для описания констант плохая практика, с точки зрения ООП интерфейс должен описывать поведение.
это я знаю, тоже немного сбивает когда интерфейсы описывают не поведение или способ взаимодействия, ну значит static писать не обязательно, спасибо за ответ)
Правильно:
Неправильно:
Я это перевел так: Проверяемое исключение не пожет быть объявлено в реализации метода, если оно, или его наследник не были обявлены в методе интерфейса. Я близок к истине?
Т.е. такой код
не нарушает это правило?
Но я никогда не видел, чтобы иключения упоминались в интерфейсах.
А вообще использовать интерфейс для описания констант плохая практика, с точки зрения ООП интерфейс должен описывать поведение.