Public/protected/private is an unnecessary feature
public/protected/private is an unnecessary feature Regular code using this interface works great: Users can write generic code that works for any Vehicle, and use a Car with that code. The implementer of Car can restrict users to only ever use Car instances through the Vehicle interface, by only allowing construction of Car instances through, for example, a function make_car with return type Vehicle. But the interface doesn't work with inheritance: Users cannot write a generic class that can i