Я привык, что в ОО языках если есть:
- Класс A
- В классе A определён метод action()
- Есть класс B наследующий от A
, то я могу вызывать метод action() для экземпляров B. Другими словами, если возможно A.action() и B::A, то возможно B.action().
А если я использую GObject, то это так или нет?
Пусть у нас есть
typedef _MamanBar MamanBar;
typedef _SonBar SonBar;
struct _MamanBar
{
GObject parent_instance;
};
struct _SonBar
{
MamanBar parent_instance;
};
void maman_bar_action (MamanBar *self)
Я ведь не могу вызывать
SonBar *son;
/* */
maman_bar_action (son);
SonBar *son;
/* */
maman_bar_action (MAMAN_BAR (son));
Получается, что мне чтобы вызывать метод недостаточно знать, что он был определён в родительском классе, но точно знать, что в каком из классов иерархии наследования он был определён. Это так?
Помимо того что это лишняя головная боль, не является ли это нарушением принципов ООП?
Или я что-то делаю не так?