Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > если класс static, все поля и методы обязательно


Автор: Gunslinger 12.5.2010, 18:34
Если класс static, то все его поля и методы обязательно помечать как static?

Автор: EnJ 12.5.2010, 22:21
Что-то я тогда в жизни упустил ))))
Незя при объявлении класса использовать ключевое слово static.
А вот поле или метод - пожалуста.

Автор: jk1 12.5.2010, 22:42
Цитата

Незя при объявлении класса использовать ключевое слово static.


Для внутренних классов можно.

По существу: нет, поля и методы статического класса могут быть нестатисческими.

Автор: EnJ 12.5.2010, 23:21
Да, точно, внутренние можно.

Как-то стыдно вдруг стало smile))

з.ы.:для справки - статический вложенный класс не имеет ссылки на внешний класс.

Автор: Gunslinger 13.5.2010, 12:24
Про то, что вложенный класс может быть статическим читал. Но примеров не нашел, поэтому меня интересует 2 вопроса:
1. Внешний класс может быть статическим?
2. Если класс статический, то, по логике, все его поля и методы так же должны быть статическими. 

Автор: EnJ 13.5.2010, 13:28
http://www.quizful.net/post/inner-classes-java

1. Нет.
2. Необязательно. Не потому он называется статическим.



Автор: Gunslinger 14.5.2010, 08:53
EnJ, спасибо за пример. 
Получается, класс (кроме вложенного) не может быть static. 
Код

[S]static[/S] class Vehicle {
    ....
}

Так нельзя?
Но static значит, что от класса нельзя создавать экземпляры. Как тогда быть, если от класса мне нужно именно такое поведение: невозможность создать экземпляр?

Автор: 4EJIOBEK 14.5.2010, 08:59
для невозможности создания экзепляра делают приватные конструкторы

Автор: AlexeyVorotnikov 14.5.2010, 09:10
Цитата(Gunslinger @  14.5.2010,  09:53 Найти цитируемый пост)
Как тогда быть, если от класса мне нужно именно такое поведение: невозможность создать экземпляр?

Сделать класс абстрактным.

Автор: Christoph 14.5.2010, 09:18
Хотел добавить вот что:
Чтоб инициализировать статический внутренний класс 
Код

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();


не статический внутренний класс 
Код

OuterClass outerObject = new OuterClass();
OuterClass.InnerClass innerObject = outerObject.new InnerClass();


Объект на внутренний класс, не может существовать без объекта на внешний класс

Автор: Gunslinger 14.5.2010, 12:36
Цитата(AlexeyVorotnikov @  14.5.2010,  09:10 Найти цитируемый пост)
Сделать класс абстрактным

о_О? Опа, мистер Эккель кое-что от меня утаил.

Цитата(Christoph @  14.5.2010,  09:18 Найти цитируемый пост)
Объект на внутренний класс, не может существовать без объекта на внешний класс 

Можно подробнее? Внутренний класс компилируется в отдельный файл. Общее - только доступ к некоторому содержимому обрамляющего класса. Как это выглядит на более низком уровне абстракции? Через глобальные переменные?

Автор: AlexeyVorotnikov 14.5.2010, 12:49
Цитата(Gunslinger @  14.5.2010,  13:36 Найти цитируемый пост)
о_О? Опа, мистер Эккель кое-что от меня утаил.


Bruce Eckel, "Thinking in Java" Fourth Edition   Глава "Interfaces" подраздел "Abstract classes and methods"
Цитата
It’s possible to make a class abstract without including any abstract methods. This is useful when you’ve got a class in which it doesn’t make sense to have any abstract methods, and yet you want to prevent any instances of that class.

Автор: Gunslinger 14.5.2010, 13:22
AlexeyVorotnikov, я думал, такая вещь к наследованию относится. А главу про интерфейсы я только собрался читать. Раз там про abstract написано, то остался только вопрос выше.

Автор: AlexeyVorotnikov 18.5.2010, 09:23
Цитата(Gunslinger @  14.5.2010,  14:22 Найти цитируемый пост)
остался только вопрос выше

Какой именно вопрос?

Автор: Gunslinger 18.5.2010, 14:37
AlexeyVorotnikov, про связь обрамляющего и внутреннего класса. Но у Эккеля уже прочитал, что связь осуществляется с помощью ссылки на обрамляющий класс. Поэтому сначала нужно создать его экземпляр, а потом уже экземпляры внутренних классов. Ссылка на экземпляр обрамляющего класса это как this? Т.е. аналогичная механика?

Автор: AlexeyVorotnikov 18.5.2010, 15:24
Цитата(Gunslinger @  18.5.2010,  15:37 Найти цитируемый пост)
Ссылка на экземпляр обрамляющего класса это как this? Т.е. аналогичная механика?

Для ссылки на экземпляр внешнего класса используется нотация
Код

OuterClass.this

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)