Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14

Наследование статических полей

04.05.2021, 18:58. Показов 4030. Ответов 15

Студворк — интернет-сервис помощи студентам
Есть 8 классов для работы с конфигами. В них есть некоторое количество как одинаковых так и разных статических методов и полей. Вынес всё повторяющееся в отдельный класс, от которого наследовал все остальные. В нём есть статические поля configName, file, config. И есть функция load, которая инициализирует эти поля. Вот только я предполагал, что для каждого наследника будут свои статические поля, а они для всех общие, и каждый последующий конфиг перезаписывает их. Собственно вопрос: Как быть?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2021, 18:58
Ответы с готовыми решениями:

Запрет на создание статических полей в Inner Class , Java
Здравствуйте, если кто знает , обьясните почему Inner Class не может иметь статические члены ? В Thinking in java это обьясняется тем что...

Наследование полей класса
Есть у меня супер-класс: class Rectangle extends Shape { int a; int b; Rectangle(int a, int b) { this.a...

Наследование полей
Есть класс, например, Parent с приват-полем х. Есть наследник, например, Child. Так вот Child наследует поле х. Как к нему обращаться в...

15
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
04.05.2021, 19:15
Не делать их статическими?
0
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
04.05.2021, 19:21  [ТС]
У меня не планируется делать несколько объектов этого класса. Я буду использовать только статические методы. Если бы у всех классов были одинаковые методы, то был бы смысл использовать один класс и тогда отпала бы проблема с этими статическими полями
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
04.05.2021, 19:44
Цитата Сообщение от TkachGeek Посмотреть сообщение
статические методы
А какое обоснование для использования статических методов?

Вообще как вариант сделать статические методы getConfigName и т.д. Ну и если надо перегружать их.
Только вот если эти статические поля постоянно меняются, то как по мне проще сделать их не статическими...
0
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
04.05.2021, 20:25  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
А какое обоснование для использования статических методов?
У меня есть некоторое количество конфигов, для каждого их них я создал класс, поскольку методы могут быть как одинаковыми, так и отличаться. Получить значение из конфига может потребоваться в любом месте и создавать экземпляры конфига везде, где он потребуется или как-то передавать его выглядит не очень.

Да и к тому-же статические поля все равно будут, тот же путь к файлу. Его в таком случае только в конструкторе передать можно будет, типа
Config cfg = new Config("path-to-cfg"); cfg.get("что-то"); вместо Config.get("что-то")

Добавлено через 12 минут
Цитата Сообщение от Coffeini Посмотреть сообщение
Только вот если эти статические поля постоянно меняются, то как по мне проще сделать их не статическими...
Есть класс

public abstract class SuperClass {
static String name = "Not initialized";

public static void load(String Name) {
name = Name;
}
public static String getName() {
return name;
}
...
}
И его наследники

public abstract class First extends SuperClass{}
public abstract class Second extends SuperClass{}

При выполнении First.load("first"); инициализируется name и больше изменяться не должна, но если выполнить Second.load("second"), то она изменится, что мне не нужно. Мне как-то нужно сделать статические поля в наследниках, чтобы они были не связаны друг с другом, но с ними работают методы и в суперклассе, так что и там эти поля нужно создать, и получается из-за сокрытия при обращении к полу name из метода в First будет одно значение, а из метода суперклассе - другое

Добавлено через 8 минут
По факту, мне нужно просто добавить методы и поля из суперкласса во все остальные, ctrl+c ctrl+v должно сработать идеально, но это будет ужасно
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
04.05.2021, 20:32
Цитата Сообщение от TkachGeek Посмотреть сообщение
передавать его выглядит не очень.
Сделай статический объект к которому можно обратиться в любой части проекта. В чём проблема-то?

А так статические методы в Java перегружать нельзя. Так что я без понятия какой "грязный хак" тут использовать....
0
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
04.05.2021, 20:36  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
Сделай статический объект к который можно получить в любой части проекта. В чём проблема-то?
Простите, но что такое статический объект?
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
04.05.2021, 20:45
Лучший ответ Сообщение было отмечено TkachGeek как решение

Решение

Тип того:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
class AllConfig{
    static String config1;
}
 
public class Main {
    public static void main(String[] args) {
        AllConfig.config1 = "9";
    }
}
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
05.05.2021, 02:47
Это не статический объект. Такого понятия вообще нет.
Есть, например, паттерн синглтон.
0
05.05.2021, 03:26

Не по теме:

Tavashi, это объект? Вроде бы да. Есть значение статик? Вроде тоже есть. Но понятия нет?

0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
05.05.2021, 03:52
Coffeini, config1 статическая переменная типа String. Посмотрел javadoc и не встретил такого термина как статический объект.
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
05.05.2021, 04:12
Цитата Сообщение от Tavashi Посмотреть сообщение
статическая переменная типа
А ООП почему не ПОП называется? Или объекты это нечто другое, эфемерное?
Цитата Сообщение от Tavashi Посмотреть сообщение
Посмотрел javadoc и не встретил такого термина
Так и не встретишь. Ведь javadoc на ангельском написана.
Ну а если серьезно, то ты занимаешься каким-то прескриптивизмом. Такое чувство, что лишь бы придраться...
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
05.05.2021, 04:22
Цитата Сообщение от Coffeini Посмотреть сообщение
А ООП почему не ПОП называется? Или объекты это нечто другое, эфемерное?
Хорошо, пусть будет статический объект, если вам так угодно.
Цитата Сообщение от Coffeini Посмотреть сообщение
Ну а если серьезно, то ты занимаешься каким-то прескриптивизмом. Такое чувство, что лишь бы придраться...
Можете еще использовать МВЖ.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
05.05.2021, 12:14
TkachGeek, если вы говорите, что поля класса в которых собственно хранятся ваши настройки меняться после построения объекта не будут, так может вам надо чтобы они не статическими, а финальными были?
0
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 14
06.05.2021, 16:19  [ТС]
Да там без разницы, коль у наследников статические поля общие. Разве что ошибку будет кидать. Сделал как кофеини советовал: В другом классе сделал статические поля, в которых по экземпляру каждого класса, чтобы избежать этих общих полей.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
06.05.2021, 18:31
Обычно если ты хочешь сделать то, что не позволяет язык, это означает что ты что-то длеаешь не так. Это как раз такой случай.
Загрузка корфигурации это распространенная задача, для решения которой умные люди уже написали библиотеки, которые можно найти в гугле, использовать и не городить свой огород.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2021, 18:31
Помогаю со студенческими работами здесь

JAVA:ActionListener и наследование полей. Помощь студенту)
Здравствуйте! У меня такое задание: нужно написать программу в среде Eclipse таким образом, чтобы вся обработка событий (нажатие клавиши,...

Наследование статических полей
Вопрос такой: может ли производный класс наследовать поля родительского класса с модификатором static?

Инициализация статических полей
Ковыряю legacy код, возможно нубский вопрос:( Есть глобальный класс со статическими полями и статическим конструктором, начало такое: ...

Обnullение статических полей класса
Добрый день. Есть такая проблема: При работе приложения периодически (раз в 2-4 минуты!) слетает сессия и обnullяются статические поля...

Замена статических полей на обычные переменные
Всем доброго времени суток.Сегодня обнаружил что в моем коде программы уже насчитывается 37 статических поля.Это выглядит не очень да и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru