заставить подкласс переопределить метод с самим собой в качестве параметра

<p>у меня есть абстрактный класс event, который имеет абстрактный метод:</p><pre><code>abstract boolean intersect(event object); </code></pre><p>этот метод должен проверять, пересекаются ли два экземпляра подкласса event на основе переменных экземпляра конкретного подкласса. я хочу заставить любой подкласс event переопределить метод на его переменных экземпляра. каков наилучший способ создать это? это моя текущая реализация, которая неверна, так как я меняю тип параметра. я также пытался использовать интерфейсы, но столкнулся с аналогичными проблемами с параметрами типа.</p><pre><code>@override public boolean intersect(subclassevent e2) { boolean intersects = false; if(this.weekday == e2.weekday) { if (this.getstarttime() < e2.getstarttime() && this.getendtime() > e2.getstarttime()) { intersects = true; } else if(this.getstarttime() >= e2.getstarttime() && this.getstarttime() < e2.getendtime()){ intersects = true; } } return intersects; } </code></pre>

<p>если вы сделаете абстрактный класс универсальным, вы можете позволить подклассам указывать себя как тип параметра:</p><pre><code>abstract class event<t extends event<t>> { abstract boolean intersect(t object); } </code></pre><p>подклассы смогут объявить свой собственный тип в качестве параметра. если ваша кодовая база не использует необработанные типы, это должно работать.</p><pre><code>class subclassevent extends event<subclassevent> { @override boolean intersect(subclassevent object){return true;} } </code></pre><p>ограничение этого (или, скорее, исключения из этого) будут необработанными типами и событиями других типов событий, которые могут разрешать другие типы параметров.</p>

<p>это невозможно сделать в java. предположим, у вас есть подкласс <code>subclassevent</code>, который реализует метод <code>boolean intersect(subclassevent e2)</code>. затем, если у него есть дополнительный подкласс <code>subsubclassevent extends subclassevent</code>, он унаследует метод <code>boolean intersect(subclassevent e2)</code> от <code>subclassevent</code>, основываясь на том, как работает наследование в java.</p><p><code>subsubclassevent</code> не должен переопределять метод, поскольку метод является неабстрактным в своем суперклассе <code>subsubclass</code>. но даже если <code>subsubclassevent</code> хотел переопределить метод, он должен переопределить его с подписью <code>boolean intersect(subclassevent)</code>. если бы он реализовал метод с подписью <code>boolean intersect(subsubclassevent)</code>, он не был бы рассмотрен как переопределение метода <code>boolean intersect(subclassevent)</code> из его суперкласса в соответствии с правилами переопределения метода java.</p><p>следовательно, <code>subsubclassevent</code> является подклассом <code>event</code>, чей метод <code>intersect</code> не принимает свой собственный тип в качестве типа параметра, что нарушает ваше условие.</p>