Java:受保护或公共,无所谓
为什么我把//Java:受保护或公共,无所谓,java,Java,为什么我把// extends Point 结果没有改变吗 public class lab11info { public class Point { private float x; private float y; protected float getX(){ return x; } protected float getY(){ retu
extends Point
结果没有改变吗
public class lab11info
{
public class Point
{
private float x;
private float y;
protected float getX(){
return x;
}
protected float getY(){
return y;
}
protected void setX(float newX){
x = newX;
}
protected void setY(float newY){
y = newY;
}
}
public class Points extends Point
{
private Point[] points;
public Points(int numberOfPoints)
{
this.points = new Point[numberOfPoints];
}
public void pointSetX(int index, float x)
{
if(points[index]==null)
points[index] = new Point();
points[index].setX(x);
}
public void pointSetY(int index, float y)
{
if(points[index]==null)
points[index] = new Point();
points[index].setY(y);
}
public float pointGetX(int index)
{
if(points[index]!=null)
return points[index].getX();
else
return 0f;
}
public float pointGetY(int index)
{
if(points[index]!=null)
return points[index].getY();
else
return 0f;
}
}
public static void main(String args[])
{
lab11info Main = new lab11info();
Points points = Main.new Points(5);
points.pointSetX(1,1.9099f);
System.out.println(points.pointGetX(1));
}
}
您所观察到的与字段和方法是公共的还是受保护的无关 Points类不使用它继承的方法和字段。主要方法也是如此。这就是为什么删除扩展时不会发生任何更改 但这里真正的问题是,你的对象建模,即点扩展点所说的没有多大意义 Points对象封装了一种点实例列表,其中包含用于访问和更新相应点的X和Y值的方法 但是你说一个点物体是一个点;i、 e.点对象具有附加的X和Y坐标。。。与点对象的点组件的坐标无关 一组点应该有额外的X,Y坐标的想法是。。。难以理解。。。我很确定这不是你想在你的造型中表达的
在本例中,public与protected之间唯一可能的关联是,不相关类中的代码将无法调用Point继承的受保护方法。但这与你的主要方法无关。因为main方法是点的方法,所以它可以合法地调用这些方法。为什么您希望有任何更改?因为类不能扩展点。您正在更改类是否扩展点。这与您的标题中的public或protected无关,当您不使用Point的任何成员时,Points是否扩展Point也没有区别。尝试在main points.setX10f;中使用;。这只在Points扩展Point时起作用。如果你是说Points为什么可以调用Point的受保护方法,即使它不是一个子类,那是因为在Java中受保护允许同一包中的任何类以及子类访问。