Did you check the documentation about package formats? In short, AMPs are the "traditional" packaging format, typically containing static (configuration) files in exploded form and the Java classes bundled in a JAR, which can be installed using the alfresco-mmt tool. An AMP is basically a ZIP that will get exploded and mapped into one of the Alfresco WARs (mapping is customisable). They can override/replace an original file in the WAR which will be backed up in a specific location, so it can be restored when the AMP is "uninstalled" (this feature was not always reliable and has since been deactivated/removed from alfresco-mmt).
JARs are the currently recommended packaging format, although not everyone in the community (myself included) aggrees. They are typically easier to work with within build automation and deployment tools.
One significant difference between AMP and JAR is how 3rd-party dependencies are handled. An AMP can bundle all the 3rd-party dependencies it needs, while a JAR cannot and relies on either the deployment automation or the person doing a deployment to handle all the dependencies in addition to itself.