RomKing, Да, немного не поняли.
Я попробую объяснить. Есть детская игрушка, где на дощечке в разные геометрические отверстия нужно вставить разные фигуры, куб, цилиндр, пирамиду, октаэдр и т.д.
Представим, что дощечка - наш класс! Дырки под фигуры - наши поля класса или переменные. Каждая дырка может соответствовать только одному типу фигуры, как замок и ключик к нему.
В дырку может быть вставлена фигура, а может и не стоять, но при этом дырка нужной формы все равно есть.
Теперь мы объявим Игру - сделаем сами доску в форме звезды с дырками под квадрат, окружность, треугольник.
Теперь на эту доску мы можем поставить (а можем и не ставить!) наши трехмерные фигуры, которые подходят в дырки, а саму доску можем положить на какую-то другую доску с дыркой типа звезда.
Тоже самое и с классами, полями и типами. При этом, сам класс тоже является типом!
RomKing, Car3 car; Это переменная с именем car типа Car3. Другими словами, в эту переменную мы можем положить только объект Car3 и производные от него. String mystr - переменная типа String, можем сделать так mysrtr = "My String"; или mystr = new String("My String");
Тоже самое с любой другой переменной, компилятор будет проверять соответствие типов при присвоении и обращении к полям внутри этого типа.
так мы и в инициализации Human объект Car3 не присваиваем переменной car...
Значит она у вас просто болтается в воздухе и равна null. Компилятор не знает, когда и где вы хотите ее присвоить, но знает, что там есть объект типа Car3 с полем color.
Вот на этапе выполнения он попытается взять значение color от переменной car, и выскочит ошибка, что доступ к не инициализированному объекту.
RomKing, А почему он должен ругаться?! У компилятора есть ВСЯ информация для доступа к полям класса Car3 поля car класса Human!
Даже, если это поле было незаполнено, что в рантайме (когда запустите) конечно же даст ошибку выполнения. Но не при компиляции.
0xC0CAC01A, По удобству не очень, печатать тексты на ней не очень. Раньше брал в командировки, сейчас в чулане валяется.
По хорошему, просто настоятельно рекомендую обратить внимание на Apple Magic Keyboard - вот сейчас стою и сравниваю с ноутбучной с Asus ZenBook S - небо и земля, клавиш практически не слышно! Цена, и раскладка только... https://www.apple.com/ru/shop/product/MLA22RU/A/%D...
egorggegor, ну я же написал, что код плохой. При выгрузке модуля куча всего не освобождается, хуки не убираются. Вот ядро враскоряку и встает после выгрузки модуля.
Дописывайте!
А так - все работает! Поздравляю!
Ну и в догонку - лучше воспользоваться netfilter API. Там есть куча зверских библиотек, которые работают в пространстве пользователя!
Наприемр www.netfilter.org/projects/libnetfilter_queue/inde... -передает нужные пакеты в программу.
И не нужно писать модули ядра!
Я попробую объяснить. Есть детская игрушка, где на дощечке в разные геометрические отверстия нужно вставить разные фигуры, куб, цилиндр, пирамиду, октаэдр и т.д.
Представим, что дощечка - наш класс! Дырки под фигуры - наши поля класса или переменные. Каждая дырка может соответствовать только одному типу фигуры, как замок и ключик к нему.
В дырку может быть вставлена фигура, а может и не стоять, но при этом дырка нужной формы все равно есть.
Теперь мы объявим Игру - сделаем сами доску в форме звезды с дырками под квадрат, окружность, треугольник.
Теперь на эту доску мы можем поставить (а можем и не ставить!) наши трехмерные фигуры, которые подходят в дырки, а саму доску можем положить на какую-то другую доску с дыркой типа звезда.
Тоже самое и с классами, полями и типами. При этом, сам класс тоже является типом!