As far as I know, it is impossible classical way to add for a class member in Java internal package protected access modifier (such as internal protected in C#) when its class has public access modifier. Do you know any way or design pattern to do this?
Why there is no syntax support to do this in Java? (or why it is in C#?)
                        
In Java the closest would be the plain
protectedmodifier for class members andpackage privatefor classes. They allow access from the same package as well as from the inheriting classes.In practice you will find Java packages are named like
internalhinting the clients that they shouldn't use the classes in this package directly.UPD
There's no way to force such kind of restriction at compile time. But at runtime you have various options like using Java Security, reflection, analyzing stack trace. But you should evaluate the pros and cons of each solution in each context.
Just for fun you could try this (I doubt this is useful in real world projects, also not sure how nice this would play with bytecode-generating proxies or maybe other exotic use cases):