Допустим, у меня есть абстрактный родительский класс, называемый "shape", и что существует несколько подклассов (треугольник, квадрат, круг ...). Я хочу определить абстрактный метод в родительском классе «shape», который должны реализовывать все подклассы, назовем его «draw». Таким образом, все подклассы фигур должны предоставлять метод draw (). Но метод draw принимает параметр типа «Stencil», и не каждый подкласс фигур может использовать только любой трафарет ...
Таким образом, существует один абстрактный класс "shape", несколько подклассов фигур и несколько трафаретов. Мне нужен метод рисования, определенный в классе формы. Квадрат может использовать Stencil1, а круг - Stencil2.
Я предполагаю, что дженерики справятся с задачей, но я не уверен. Каждый подкласс формы должен определять метод draw с определенным трафаретом, потому что эти классы также используются другими классами, и компилятор должен заставить всех программистов вызывать методы draw с трафаретом, который поддерживается этим классом. Мы не можем определить абстрактный метод, такой как «public abstract void draw (Stencil s)», потому что тогда программист может передать любой трафарет классу square, тогда как класс square поддерживает только «Stencil1»
Есть идеи?
Update1:
Следует добавить, что классу фигуры не важно, какой трафарет используется подклассом, но поскольку подклассы используются и в других классах, важно, чтобы метод draw был определен так, чтобы компилятор принимал только поддерживаемый трафарет.