У меня есть 2 класса. Давайте назовем их классом A и классом B. Класс A содержит метод, который выполняет некоторое действие. Класс B переопределяет этот метод своей собственной версией, но делает super
вызов этого метода в классе A для выполнения действия. Прямо сейчас это работает нормально. Однако в классе A есть некоторые действия, которые должны выполняться только в том случае, если объект является only экземпляром класса A. Иными словами, некоторые действия в методе класса A не должны выполняться, если объект является экземпляр ребенка класса А.
В настоящее время я использую instanceof
для проверки каждого дочернего элемента, но мне нужно указать каждый дочерний класс, поэтому, если новый дочерний элемент добавляется позднее, этот метод необходимо обновить. То, что я хотел бы, является динамическим способом определения, является ли объект дочерним классом.
Есть ли хорошие альтернативы, или instanceof
путь?
public class A{
public void someMethod(){
// Only perform these actions if it is not a child class. This is what
// I am looking for a better solution for
if(!(this instanceof B)){
// Some action...
}
// Actions to execute for every call
}
}
public class B extends A{
@Override
public void someMethod(){
super.someMethod();
// More actions
}
}
Так же, как объяснение дизайна, я использую его для генерации XML. В программе у меня есть List<A>
для хранения данных. Когда пришло время вывести XML, я перебираю список и вызываю generateXML
(someMethod
занимает свое место в моем примере).
При создании объекта класса A его данные должны быть в тегах <A></A>
. При создании объекта класса B его данные должны быть в тегах <B></B>
. Но все свойства A
также должны быть внутри тегов <B></B>
, поэтому на данный момент он вызывает тот же метод generateXML
, который используется, когда объект имеет только класс A
Но, как отмечали некоторые другие, вызов того же метода не является подходящим способом. Класс B
должен вызывать защищенный метод в классе A
, который генерирует только необходимую информацию.