Единственный способ, которым вы можете достичь того, что вы хотите, и при этом иметь смысл, - это если вы можете использовать все возможные (общие) параметры и использовать значения по умолчанию.
Я имею в виду следующее.что-то вроде:
import std.stdio;
abstract class Dog {
public:
uint age;
abstract void moveDog(uint steps, float direction=float.nan);
abstract void feedDog(uint numFoodBowls=-1, float foodWeight=float.nan);
abstract void playFetch(uint timeToPlay, float throwDistance, float throwStrength=float.nan);
}
class BigDog: Dog {
public:
override void moveDog(uint steps, float direction) {
writeln(direction);
}
override void feedDog(uint numFoodBowls=-1, float foodWeight=float.nan) {}
override void playFetch(uint timeToPlay, float throwDistance, float throwStrength=float.nan) {}
}
class SmallDog: Dog {
public:
override void moveDog(uint steps, float direction) {
writeln(direction);
}
override void feedDog(uint numFoodBowls=-1, float foodWeight=float.nan) {}
override void playFetch(uint timeToPlay, float throwDistance, float throwStrength) {}
}
void main() {
auto obj = new BigDog();
obj.moveDog(5, -0.1f); // -0.1
}
Наконец, как отмечали другие, если ваше «поведение» (методы определяют поведение) отличается для каждого «вида» (подкласса) Dog, то оно не должно быть в интерфейсе(абстрактный класс) ...