Main Difference is Preference are used to override the existing class
Plugin is used to extend or modify a public methods behavior by applying code before,after or around the observed methods.
The First argument for before,after and around method is an object that provides access to all public methods of the observed methods class.