У кожній мові - два етапи створення кінцевого бінарного коду - компіляція та зв’язування (звичайно, завантаження є, але це не має великого впливу тут). На момент складання потрібно лише поставити гачки (специфікацію функцій, які будуть називатися) у відповідне місце. Linker насправді приєднується до них, коли доступні обидва реальні коди. Поки немає різниці між C ++ та Java.
Там є , однак, потреба в C ++ , щоб мати декларацію і визначення окремої. Якщо ви зберігаєте реалізацію в заголовку, і якщо файл заголовка змінюється, код, який пов'язаний з ним, потрібно перекомпілювати. Де як би дефініція знаходиться в окремому файлі, код потрібно лише повторно пов’язати.
Зрозумійте, що у C ++ є можливість мати статичне посилання, що означає, що об'єктний код фіксується разом із викликаючим додатком. Зверніть увагу, що і в C, і в C ++ не можна мати програмування в заголовковому файлі або навіть робити #include. це означає лише, що вам потрібно потурбуватися про те, як відбувається посилання з цими об’єктними файлами.
Ситуація на Яві дуже різна. Кожен файл класу компілюється з файлом .class. Дійсно, необхідність компіляції функцій класу виклику, яка подається як заголовок розділу у файлі .class. Однак у Java остаточне з'єднання здійснюється лише всередині програми виконання (віртуальної машини) тільки з урахуванням специфікації байтового коду файлу класу.
Дивіться це і це