I guess he means to prevent an attacker from manipulating/accessing the internals of an object. Slightly related to this: immutable classes are "safe" and thread-safe.
Class A is safe depending on the fact that the values assigned to a, and b, are legal according to the class invariants. A check in the constructor and throwing an IllegalArgumentException would ensure only proper values are assigned.
The same reasoning could be applied to A when implements Serializable. Some checks could be written within readObject. Not all the input to be deserialized could come from a proper object serialization, there is a risk: if someone provides a manipulated stream of bytes with an illegal value to a. Fortunately the above mentioned check will twart the attempt.
In the third example if B is mutable, and the caller to A constructor would retain a reference to it, he might change it at will. To prevent this, pass a copy of B as a parameter to the Immutable constructor. This is named defensive copy, and it should be done for reference arguments to constructors, accessors and mutators to preserve integrity of the object. Also it must be considered in the readObject method.