为什么这个受保护的属性不起作用?

时间:2014-11-14 18:30:11

标签: java inheritance protected

我在以下代码中使用了protected修饰符,但它没有像我期望的那样工作。

这是我的Prob3.java文件,编译ob1.x=4;时我预计会出错 任何人都可以解释为什么我没有得到一个吗?

class Coordinates2D{
    protected int x,y;
    public Coordinates2D(int x,int y){
        this.x=x;
        this.y=y;
    }
    public int getX(){
        return this.x;  
    }
    public int getY(){
        return this.y;
    }
    public void setX(int val){
        this.x=val;
    }
}

public class Prob3{
    public static void main(String[] args){
        Coordinates2D ob1 = new Coordinates2D(3,4);
        ob1.x=4;  
        System.out.println("Atributele ob 2D: "+ ob1.getX()+" , "+ob1.getY());
    }
}

3 个答案:

答案 0 :(得分:1)

protected关键字将变量或函数的可访问性范围限制在同一个包中,或者使用所述变量或函数继承该类的任何子类。这意味着只要两个类在同一个包中,他们就可以使用protected关键字访问彼此的属性和方法。在这种情况下,它们不仅在同一个包中,而且在同一个类文件中。如果您想将x,y的访问权限仅限于Coordinates2D类,请改为使用关键字private

答案 1 :(得分:0)

protected成员可见

  • 班级本身
  • 该类的任何子类,
  • 同一个包中的任何类。

由于这些类位于同一个文件中,因此它们位于同一个包中,因此它们可以访问。

答案 2 :(得分:0)

您没有收到错误的原因是因为您没有做错任何事情。但是,你认为你做错了所以让我解释一下:

protected关键字允许在同一package的任何类中查看变量。

由于您的prob3类和您的Coordinates2D类在同一个包中,因此可以在两者中访问受保护的变量。如果要限制x和y变量的可用性,则应将其访问修饰符设置为private:

private int x, y;

尝试一下,让其余代码保持不变。您将收到预期的编译器错误。