Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:受保护或公共,无所谓_Java - Fatal编程技术网

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中受保护允许同一包中的任何类以及子类访问。