Child themes are the recommended way of modifying theme. A child theme is a theme that inherits the functionality and styling of another theme, called the parent theme.
If you want to change more than just the stylesheet, your child theme can override any file in the parent theme: simply include a file of the same name in the child theme folder.
You can also include files in the child theme that are not included in the parent theme. See the Template Hierarchy for more information.
See also WordPress Codex – Child Themes.