首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

protected访问范围有关问题

2012-01-22 
protected访问范围问题Java codeclass Piece {protected int changes 3}class Piece0 extends Piece{pu

protected访问范围问题

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返回的是父类。。父类访问自己类里声明的变量怎么会报错呢
没区别
[解决办法]
探讨
Java code

class Piece
{
protected int changes = 3;
}
class Piece0 extends Piece
{
public Piece0()
{
int i = new Piece().changes;//这里出错是访问限制
super.changes; //可是这……

[解决办法]
探讨

引用:

从编译的角度上来说,假设Piece和Piece0在同一个里面
int i = new Piece().changes;//这句是没错的,只是新建了一个父类对象,changes也是可见的
super.changes; //这句话是错的,super.changes只是一个变量,编译器会报错super.changes=1……

热点排行