protected访问修饰符所修饰对象的作用范围是其子类,超出范围后访问时则会报错(编译错误)。
请看下面这个例子:
1. com.c2 Vehicle类
public class Vehicle {
protected void run(){
System.out.println("Vehicle run...");
}
}
2. com.c1 Car类
public class Car extends Vehicle {
public static void main(String[] args) {
new Car().run();
}
}
3. com.c1 Bicycle类
public class Bicycle {
public static void main(String[] args) {
Car car = new Car();
//car.run(); // 编译错误
}
}
虽然在Biclycle中能够访问到Car类(毕竟Car被public修饰),但调用car.run()时会报错,这是因为Car类的run()继承自Vehicle,由于protected的缘故,只能在Car类中被调用。
如果想在Bicycle中调用来自Vehicle类的run(),有两种做法:
1. Bicycle类继承Vehicle类。只不过,能使用的run()只属于Bicycle类,car.run( )中,被调用的run( )仍属于Car,与前者的run( )完全不同。
2. Bicycle类放在com.c2包下,也就是与Vehicle同包。