The point of having custom exception types is to convey more information than is available in standard types. But custom exception types must be
public
for that to work.
If a method throws a non-public exception, the best you can do on the caller’s side is to catch
the closest public
base
of the class. However, you lose all the information that the new exception type carries.
This rule will raise an issue if you directly inherit one of the following exception types in a non-public class: