java中提供了4中访问控制权限,分别是:
private:私有的,只能本类中访问
默认的:也就是没有写private 或 protected 或public的:同一个包中可见(同一个类中当然也可见)。
protected:受包和继承关系的保护,本包中可以访问,不同包中的子类可以访问,当然,同一个包中的子类更能访问了
public:公开的,都可以访问的到。
作用域  private     默认        protected   public   
本类     Y     Y     Y      Y
同一包中的类      Y     Y      Y
不同包中的子类       Y      Y
不同包中的非子类         Y
 
在说明访问控制权限之前,我们先来看一下,我们学的修饰符都可以修饰哪些东西:比如,private可以修饰局部变量吗? 
  Public Protected    --    Private   Static    Final Abstract
   Y    Y    Y    N     N   Y   Y
属性   Y    Y    Y    Y     Y   Y   N
方法   Y    Y    Y    Y     Y   Y   Y
局部变量   N    N    N    N     N   Y   N
内部类   Y    Y    Y    Y     Y   Y   Y
 
说明:这里的Y表示可以修饰,N表示不可以修饰。
下面我们说protected的使用及注意事项:
1、同一个包中的本类,其他类,子类都是能访问的到的(有学生去关注了不同包,反而忽略了同一个包,特此说明,或者写下代码,一下就清楚了)。
2、不同包中,父类不能访问,子类内部可以访问,其他类中的子类对象不能访问。
父类:
package com.aiai.study.oo;
public class Pet {
  protected int i = 3;
}

子类 测试类: 
package com.aiai.study;
import com.aiai.study.oo.Pet;
public class Dog extends Pet {
  public static void main(String[] args) {
    Pet p = new Pet();
    // 不同包中的父类对象不能访问
    // p.i = 3;
    // 不同包中的子类内部可以访问
    Dog dog = new Dog();
    dog.i = 3;
  }
}

class Test {
  public void test() {
    Dog dog = new Dog();
    // 不同包中非子类中,不能通过子类对象访问
    // dog.i = 3;
  }
}