One reason for overfitting is having the wrong training data. If you have a training data set with a lot of noise and you have a lot of training examples, the classifier will look at the noise in the training data and not the underlying pattern that you are trying to build a model for. Another reason is that your model is just too complex. If you have a model where a small change in input can cause a large change in output you can get overfitting. Another solution is to use regularization. Regularization will shrink long branches in your model. It smooths out your model and prevents overfitting.