- Java code
class Piece { protected int changes = 3;}class Piece0 extends Piece{ public Piece0() { int i = new Piece().changes;//这里出错是访问限制 super.changes; //可是这里问什么不报错咧 } }
super.changes为什么能访问protected的变量。
------解决方案--------------------
protected是同包内都可以访问
------解决方案--------------------
声明父类的时候要用super();
------解决方案--------------------
- Java code
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返回的是父类。。父类访问自己类里声明的变量怎么会报错呢
没区别
------解决方案--------------------
------解决方案--------------------