Java:受保护或公开,无所谓

时间:2014-02-02 13:13:11

标签: java

为什么我在

之前加上“//”
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));
    }
}

1 个答案:

答案 0 :(得分:4)

您观察的内容与字段和方法是public还是protected无关。

您的Points类不会使用它继承的方法和字段。 main方法也没有。这就是删除extends时没有任何变化的原因。

但这里真正的问题是你的对象建模(即Points extends Point)“说”没什么意义。

  • Points对象封装了Point个实例的“排序”列表,其中包含访问和更新各个点的X和Y值的方法。

  • 但是你说Points对象是-a Point;即,Points对象具有额外的XY坐标...独立于Point对象的Points组件的坐标。

点集合应该有额外的X,Y坐标的想法是......很难理解......我很确定这不是你想要表达的内容你的建模。


此示例中publicprotected唯一可能的相关性是,无关类中的代码无法调用protected Point方法由Points继承的。但这与您的main方法无关。由于main方法是Points的方法,因此可以合法地调用这些方法。