【问题标题】:java, extending class with constructor in superclassjava,在超类中使用构造函数扩展类
【发布时间】:2023-03-26 05:10:01
【问题描述】:

我有一个定义字段“坐标”的类,它是一个没有长度的数组和一个子类,我需要设置一个数组长度来使用它。所以问题是如何更改坐标数组的长度在子类中。这是代码: 超类:

abstract class Vector implements sample {       

    private int[] coordinates;  

    public Vector (int[] coordinates) {

    }
}

和子类:

class Vector3D extends Vector {

    public Vector3D(int[] coordinates) {
        super(coordinates);

    }
}

【问题讨论】:

  • 这里的一个问题是private 类成员coordinates,它将不会被继承。也许它适用于protected int[] coordinates;,但我不确定......
  • 首先,您可能希望超类的构造函数将传递的参数分配给相应的类成员。剩下的,我真的不知道你在问什么。
  • 如何更改坐标数组的长度 - 一点也不。数组具有固定大小。但是你可以给变量coordinates分配一个一定长度的数组。

标签: java constructor extends


【解决方案1】:
abstract class Vector implements sample {       
    private int[] coordinates;  
     public Vector (int[] coordinates){
         this.coordinates=coordinates;
     }
}

如果你想通过调用new Vector3D(1,2,3)来初始化坐标:

class Vector3D extends Vector {

    public Vector3D(int n1,int n2,int n3) {
       super(new int[]{n1,n2,n3});
   }
}

【讨论】:

  • 谢谢,但我可以以某种方式更改代码,以便在 main 中创建新向量,例如 Vector3D vec = new Vector3D(1,2,3); ?
  • 谢谢!最后一个问题:有没有办法传递未声明的变量数量?例如 public VectorND(int...n) { super(new int[] {}); } 我应该在数组声明的 {} 中写什么?
【解决方案2】:

你的父类(Vector)需要设置私有字段。目前,参数和实例变量是不相关的。

这样就可以了:

public abstract class Vector implements Sample {
   private int[] coordinates;

   public Vector(int[] coordinates) {
      this.coordinates = coordinates;
   }
}



public class Vector3D {
   public Vector3D(int[] coordinates) {
      super(coordinates);
   }
}

// usage:
new Vector3D(new int[]{ 1, 2, 3 }); // Vectors coordinate size: 3. Content: 1, 2, 3

这会将 Vector3Ds 数组传递给父级,其大小与提供给 Vector3D 类的大小相同。

【讨论】:

    猜你喜欢
    • 2013-11-15
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多