日期:2014-05-20 浏览次数:21033 次
class Piece 
{
  protected int changes = 3;
}
class Piece0 extends Piece
{
  public Piece0()
  {
    int i = new Piece().changes;//这里出错是访问限制
    super.changes;              //可是这里问什么不报错咧
    
  }
  
}
public class ProctedTest {
    protected int value = 1;
}
class SubClass extends ProctedTest {
    public SubClass() {
        int value = new ProctedTest().value;
        int supervalue = super.value;
    }
}
------解决方案--------------------
类别         类内部   同一包内   子类   包外部类  
public      允许      允许      允许    允许  
private     允许     不允许    不允许  不允许  
protected   允许      允许     允许    不允许  
friendly    允许      允许     不允许  不允许  
------解决方案--------------------
从编译的角度上来说,假设Piece和Piece0在同一个里面
int i = new Piece().changes;//这句是没错的,只是新建了一个父类对象,changes也是可见的
super.changes;              //这句话是错的,super.changes只是一个变量,编译器会报错super.changes=1;才是一句完整的赋值语句
至于protected,就是同包中可见,只有Piece和Piece0不在同包里才会报错
------解决方案--------------------
super返回的是父类。。父类访问自己类里声明的变量怎么会报错呢
没区别
------解决方案--------------------