Java не поддерживает множественное наследование реализации , но поддерживает множественное наследование интерфейса .Таким образом, вы можете реализовать столько интерфейсов, сколько захотите.Чтобы избежать дублирования и совместного использования кода несколькими классами, вы можете использовать делегаты.
Например:
- Интерфейсы:
interface IGas {
checkGas();
onLowGasEvent();
}
interface IBattery
checkBattery();
onLowBatteryEvent();
}
реализации общей функциональности
class GasImpl implements IGas {
checkGas() {
...
}
onLowGasEvent() {
...
}
}
class BatteryImpl implements IBattery {
checkBattery() {
...
}
onLowBatteryEvent() {
...
}
}
Деятельность (обратите внимание на раздел внедрения):
class GasCar extends Car implements IGas {
IGas mGasImpl = new GasImpl(); // create it in your own code, or inject to inverse dependencies, etc.
checkGas() {
mGasImpl.checkGas();
}
onLowGasEvent() {
mGasImpl.onLowGasEvent();
}
}
class BatteryCar extends Car implements IBattery {
IBattery mBatteryImpl;
checkBattery() {
mBatteryImpl.checkGas();
}
onLowBatteryEvent() {
mBatteryImpl.onLowBatteryEvent();
}
}
И тогда ваш
HybridCar
будет выглядеть примерно так:
class HybridCar extends Car implements IGas {
IGas mGasImpl;
IBattery mBatteryImpl;
checkGas() {
mGasImpl.checkGas();
}
checkBattery() {
mBatteryImpl.checkBattery();
}
}
Если вы хотите работать с
EventBus
, вы должны оставить подписчиков в качестве интерфейса Activity - но делегировать его реализацию также и обработчикам.Итак, в
HybridActivity
:
@Subscribe(threadMode = ThreadMode.MAIN)
function onLowGasEvent(){
mGasImpl.onLowGasEvent();
}
@Subscribe(threadMode = ThreadMode.MAIN)
function onLowBatteryEvent(){
mBatteryImpl.onLowBatteryEvent();
}
Если для onLow...Event
требуется Context
, обновите методы интерфейса, чтобы передать его в качестве параметра.
Надеюсь, это поможет.