java为什么不能用protected修饰类,
1.可以用protected修饰类,不过是内部类
2.外部类只能用public以及默认修饰:protected修饰符代表能被同包以及子类访问
类的访问无非就是继承或者创建对象或者使用其静态成员
继承:public就够在其他包继承了,protected的子类访问继承是冲突的(如果有protected那就是子类才能访问本类并继承,但是不继承哪来的子类),默认的只能同一个包继承(方便不同包下有重名文件,可以通过import解决其他包调用,而且能通过路径确定类),private:本类才能访问继承?本类继承本类干嘛?继承以后怎么区分?所以不能用private
创建对象:继承都过不了,那就意味着protected修饰的类其他包不存在子类,那也不存在什么子类在去创建父类对象了,而public和默认就够用,private:本类才能创建对象?会造成无限创建对象。而且只能本类创建对象完全可以通过private构造器解决。(单例模式)
静态成员:写到这不想写了,一个过不了,其他的都不能满足
总结:public和默认逻辑正确,适用场景全覆盖,所以不能适用其他修饰符来修饰外部类。
个人理解,不同包下只有public修饰的类才能产生继承关系。protected是用来表示在继承关系中的访问权限的!
在同一包下
private修饰的类----->无意义
default修饰的类----->可以继承
protected修饰的类----->可以继承
public修饰的类----->可以继承
不在同一包下,只有public修饰的类才能继承
private修饰的类----->无意义
default修饰的类----->不能继承
protected修饰的类----->不能继承,只有public修饰的类才能被继承
public修饰的类----->可以继承
综上所述,用protected修饰的类和用default修饰的类实现的效果一样,所有舍弃用protected来修饰。
如有误导,请多指教,马上修正!