На каждом языке - есть два этапа для создания окончательного двоичного кода - компиляция и компоновка (конечно, есть загрузка, но это не имеет большого влияния здесь). Во время компиляции нужно только поставить хуки (спецификацию функций, которые будут вызываться) в соответствующем месте. Линкер фактически присоединяется к ним, когда доступен как реальный код. Пока что нет никакой разницы между C ++ и Java.
Там является , однако, потребность в C ++ , чтобы иметь декларацию и определение отдельной. Если вы сохраняете реализацию в заголовке и если файл заголовка изменяется, код, связанный с ним, должен быть перекомпилирован. Где, как будто определение находится в отдельном файле, код нужно только повторно связать.
Поймите, что в C ++ есть опция статического связывания, которая подразумевает, что объектный код фиксируется вместе с вызывающим приложением. Обратите внимание, что как в C, так и в C ++, недопустимо программирование в заголовочном файле или даже #include. это только означает, что вам нужно беспокоиться о том, как происходит связывание с этими объектными файлами.
Ситуация в Java очень отличается. Каждый файл класса скомпилирован с файлом .class. Действительно, необходимость компиляции функции класса вызывающего, которая служит разделом заголовка в файле .class. Однако в Java окончательное связывание выполняется только внутри среды выполнения (виртуальной машины) только с учетом этой спецификации байтового кода файла класса.
Смотрите это и это