What differentiates an abstract noun with a concrete noun?

Solution 1:

A concrete noun names something you can perceive with your senses; an abstract noun names something you cannot perceive with your senses.

Examples of concrete nouns are: table, noise, pineapple.
Examples of abstract nouns are: democracy, belief, sadness.

[Reference: English Grammar—David Daniels, Barbara Daniels; ISBN 0-006-467109-7]

Solution 2:

I think you are best asking this question of the person who first taught you this terminology. It's not an official term like noun or verb. That said, some words clearly describe actual things you can touch, hear, and see (desk, dog, apple) and others describe intangible concepts (love, employment contract, marriage, tax rate). When my kids and I play 20 Questions, we add a category that covers these things along with TV shows, songs, emotions and other intangibles. Definitely for advanced players :-).

In Object Oriented Programming, concrete classes describe things that can actually exist (truck, employee, purchase order, savings account, square) and abstract classes describe "umbrella concepts" that are more category than object (vehicle, business entity, transaction, bank account, shape). I ask my students to imagine opening "just a bank account - not a savings account, not a chequing account, not a retirement account, just an account." It can't be done. Abstract classes can't be instantiated. Only concrete ones can. Now, does this have anything to do with the distinction someone made to you? And how does sunlight fit into this?