Вы должны быть в состоянии сделать это следующим образом:
public void callHandle(Packet packet) {
if (packet instanceof DummyPacket) {
((DummyPacket) packet).handle();
}
}
[РЕДАКТИРОВАТЬ] После того, как ОП дал больше информации, оказалось, что он ищет способ, чтобы несколько классов имели метод ста же подпись.
То, что вы ищете, это интерфейсы.Взгляните на эти классы:
public class Packet { }
public interface Handleable {
public void handle();
}
public class DummyPacket extends Packet implements Handleable {
@Override
public void handle() {
// Do something
}
}
public class OtherPacket extends Packet implements Handleable {
@Override
public void handle() {
// Do something else
}
}
public class LastPacket extends Packet { }
В этом примере у вас есть 3 класса, которые extend
Packet
класс:
DummyPacket
OtherPacket
LastPacket
Но только 2 класса, которые реализуют интерфейс Handleable
:
Это означает, что вы можете проверить, есть ли у класса метод handle
, например:
public void callHandle(Handeable someClass) {
someClass.handle();
}
Теперь мы можем отфильтровать все классыкоторые не имеют handle
метода.
Я предлагаю вам прочитать больше о наследовании , абстрактных классах и интерфейсах .