I suppose you know the concept of public key cryptography? If you don't, here is a very short explanation: Public key cryptography (as used in Bitcoin), allows you to hand people a public key and use the corresponding private key to prove the ownership. So you can create any random private key (keep it secret) and calculate the corresponding public key (give it out to public for verification). Using this private key, you can sign a message and other people can verify that you own the private key by using your public key.
So, applied to Bitcoin.
A Bitcoin address is just a shorthand notation for a public key. When someone makes a transaction to an address, he states that "I give the right to spend this money to the person who owns the private key corresponding to this address". The person who has received this transaction will in turn be able to spend the transaction by signing the transaction using his private key. With this signature he can prove that he owns the key, without disclosing it. Others can verify the signature using the public key.
As for the second part of your question, if you download a bitcoin wallet, you can have as many different addresses as you wish.
Meaning for instance, if I want to transfer $100 to u, I'll hand u my public key, thereafter I'll use my private key to identify myself as the authentic user? Meaning there's no harm for anyone to know my public key right? It's the private key which is utpmost importance