Encapsulating types properly

You are working with a team to create a new application for keeping track of the inventory of a chemistry lab. Your application consists of lots of types that all participate in making sure that items are not used by unqualified personnel, dangerous chemicals are not used in the same room, and items are ordered as soon as the stock is running low. Currently, all types in the system have different access modifiers. Some types are completely immutable; others expose all their data. You are discussing the current problems with a colleague. He argues that all types and all type members should be public.

Explain to your colleagues why making all members public isn’t the solution.
Give an example of how a property can help with encapsulating data while still improving usability.
How can interfaces be used to improve the design?