Обычный способ обмена свойствами и поведением (методами / операциями) между классами заключается в использовании наследования :
Class X { // Common base
int a;
int b;
}
Class A:X { // One specialization
int c;
}
Class B:X { // Another specialization
int d;
}
Это облегчает повторное использование, поскольку вы можете повторно использовать реализацию X в разных контекстах.
Но использование наследования - это не просто совместное использование некоторых элементов: наследование также определяет отношение генарализации / специализации: A - это особый вид X. Это означает, что можно надеяться, что при использовании X A может быть использованы также. Кроме того, это определенное отношение: A ВСЕГДА X.
Но, как вы указали, если это просто для обмена, и в отсутствие каких-либо концептуальных отношений, это может быть не самой разумной идеей использовать наследование, чтобы сохранить несколько нажатий клавиш. В случае сомнений вы можете предпочесть составление наследованию :
Class X { // Some elements to be shared
int a;
int b;
}
Class A { // Independent class
X x;
int c;
}
Class B:X { // Another independent class
X x;
int d;
}
Каждый A и B будет иметь свойство x, которое содержит общие a и b. Преимущество состоит в том, что A и B не ограничивают интерфейс X импелмента. Кроме того, отношение является динамическим c (например, вы не можете определить x, или x может измениться). Кроме того, в зависимости от языка вы можете даже использовать один и тот же объект x между несколькими объектами A и B.