Forif I say Task, there will be taskfeed as well as feeditem object having the same entry for one chatter feed for a task. what is the diference between these two?
FeedItem is a generic object represents any feed, whereas something like TaskFeed or CaseFeed only applies to that particular object. The main reason for using an object-specific feed object is that the generic FeedItem needs a high level of permission to query:
If you are using API version 23.0 or later and have “View All Data” permission, you can directly query for a FeedItem.
Most users don't (and shouldn't) have that permission, so if you write some code a user can initiate that references FeedItem, you will get an error if they don't have View All Data. But they can query CaseFeed if they have access to Cases.