java中有三个访问控制符和一个缺省的控制符
public:所有类都能够访问
protected:类内部,同一包中的类,子类
private:类内部
缺省:同一包中的类
这里需要注意的是protected中所说的子类,
举例如下
package com;
public class A {
int a = 1;
}
package com;
public class B {
public static void main(String[] args) {
A abc = new A();
System.out.println(abc.a);
}
}
类A和B在同一包中,A类中的属性a使用了缺省的访问控制符,符合了前面说的缺省的同一包中的类可以访问。
下面继续看例子
package com;
public class A {
protected int a = 1;
}
package com.sunyongxing;
import com.A;
public class B extends A{
public static void main(String[] args) {
A abc = new A();
System.out.println(abc.a);
}
}
类A的属性a现在用protected修饰,类B和类A不在同一包,但B继承了A,那么根据前面所说,在B类中访问A类中的属性A编译出错,错误信息是属性a不是可见的。从这个例子可以看出protected说的子类可以访问的理解。
将B类改成下面的
package com.sunyongxing;
import com.A;
public class B extends A{
public static void main(String[] args) {
B abc = new B();
System.out.println(abc.a);
}
}
这样就可以访问了,因此得出结论,protected所说的子类可以访问,是子类可以继承父类中protected中修饰的属性和方法,而不是在子类中通过父类去访问protected属性。
而缺省修饰和private修饰的都不可以被子类所继承