Как сделать методы класса доступными только для одного класса?
Как сделать доступными методы класса только для одного класса? Например: У меня есть два класса - public class DAO и public class UserService extends DAO Я хочу закрыть доступ к методам DAO с любой части программы, и оставить к ним доступ только через UserService. Как такое реализовать и на сколько это возможно?
My1Name, не класс, а методы. Без модификатора в Java означает package-friendly, т. е. доступны только из классов, которые находятся в том же пакете. Если UserService лежит в другом пакете, то модификатор protected разрешает доступ также классам-наследникам данного класса вне зависимости от пакета. На Java 15+ можно заморочиться и сделать класс DAO sealed, дабы ограничить возможность создания классов-наследников от него...
Когда тебе хочется странного, то нужно заново пересмотреть дизайн этого UserService и DAO
с точки зрения SOLID. Если этот DAO нигде не существует то может быть он вообще не нужен
как сущность. Сделай композицию или рефакторинг чтобы у тебя был только UserService.
mayton2019, чтоб разделить работу с БД от основной части программы. Кроме того class UserService включает в себя UserDetails и исключает надобность в дополнительном классе в контексте Spring Security - implements UserDetailsService
Что странного во friend классах? Это стандартная концепция из классического ООП. В C++ для этого есть ключевое слово friend.
А ответом на вопрос ТС в Java будет использование пакетов. Методы без модификаторов (public, private, protected) будут доступны лишь в данном пакете и вложенных в него. Дополнительно можно указать модификатор protected - тогда методы будут доступны еще и в классах-наследниках. Но из других мест программы получить доступ к ним будет нельзя.
Это, в общем-то, обычный вопрос на знание основ языка, ответ на который должен дать любой junior.