为什么这个受保护的属性不起作用?
我在下面的代码中使用受保护的修饰符,但它不像我所期望的那样工作。为什么这个受保护的属性不起作用?
这是我的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());
}
}
你没有得到错误的原因是因为你没有做错任何事情。但是,您认为您做错了,请让我解释一下:
关键字protected允许在同一个package的任何类中查看变量。
由于您的prob3类和Coordinates2D类位于同一个包中,因此可以同时访问受保护的变量。如果你想限制变量x和y的可用性,你应在其访问修饰符设置为私有:
private int x, y;
尝试它,并留下您的代码相同的其余部分。你会得到你期望的编译器错误。
谢谢。我理解这个主意。最后,我得到了PROTECTED概念的理解。 – 2014-11-14 18:53:00
@TautAdrian很高兴知道。这绝对是一个棘手的问题,你并不孤单,你的困惑。 – AdamMc331 2014-11-14 18:54:56
的protected
关键字限制任一个变量或函数的可访问性的范围,以相同的封装内,或任何亚类继承与类所述可变或功能。这意味着只要两个类位于同一个包中,他们就可以使用关键字protected
访问对方的属性和方法。在这种情况下,它们不仅在同一个包中,而且在同一个类文件中。如果要限制x,y
的访问权限仅限于Coordinates2D
级别,请改用关键字private
。
只是为了让它更加清晰:如果你的类在同一个.java文件中定义,那么你的两个类都在同一个包中 - 因此,在你的场景中按照预期进行保护。 – JBA 2014-11-14 18:42:40
protected
部件是可见的
- 类本身
- 类的任何亚类和
- 在相同的包中的任何类。
由于这些类位于同一个文件中,因此它们位于同一个包中,因此它们将具有访问权限。
可能的重复:http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default-protected-and-private'protected'允许在同一个包中访问。 – clcto 2014-11-14 18:35:31
您正试图在类Coordinates2D之外设置对象值。因为ob1.x受保护,它会给你一个错误。 – 2014-11-14 18:35:31
它们是否在同一个包中?如果他们是,那么这工作正常。受保护意味着它可以在包装内查看。如果你只希望它被那个班级看到,你应该使用私人的。 – AdamMc331 2014-11-14 18:35:40