处理超级

时间:2015-11-20 14:33:30

标签: java

我不完全理解这个主题及其运作方式。我写了一个代码示例,它看起来是否正确?因为当我跑它时,它一直给我错误。

class team {
    public team(String[] name, String[] lastname, int year) {
    private String[] name;
    private String[] lastname;
    private int[] year;
}

public class Player extends team {
    Patrolman(String first, String last, int y){
        super(first,last,y);
        name first = new name{Road};
        lastname last = new lastname{Runner};
        year y = new year{5};
}

4 个答案:

答案 0 :(得分:0)

你遇到的问题不是超级 - 你不能在构造函数中声明私有字段。类字段应该在类范围内声明,而不是在构造函数或任何其他方法中声明。

应该看起来像:

class team {
  private String[] name;
  private String[] lastname;
  private int[] year;
  public team(String[] name, String[] lastname, int year) {
    name = name;
    lastname = lastname;
    year = year;      
  }

...
...
...

另外,我不明白你在Patrolman构造函数中的含义:

name first = new name{Road};
lastname last = new lastname{Runner};
year y = new year{5};

这不是java语法。我想你的意思是:

String[] name = {'Road'};
String[] lastname = {'Runner'};
int year = 5;

但是因为调用super应该是子类构造函数中的第一件事,你应该这样做:

Patrolman(String first, String last, int y) {
  super({first},{last},y);
}

答案 1 :(得分:0)

不知道您收到的错误我会猜到它是由Patrolman类<{1}}中的Player构造函数引起的。

试试这个

public class Team {
   private String[] name;
   private String[] lastname;
   private int[] year;

   public Team(String first, String last, String y) {
      name = first.getBytes();
      lastname = last.getBytes();
      year = y.getBytes();
   }
}

public class Player extends Team {
    Player(String first, String last, int y) {
        super(first,last,y);
    }
}

由于您将firstlasty传递到super,因此您可能无需在Player构造函数中对它们执行任何操作。

答案 2 :(得分:0)

您的代码存在一些问题。

  1. 您在构造函数中声明了新变量。那些变量不会存储任何东西。它们需要在构造函数之外声明,然后在传入的参数内部在构造函数内初始化。
  2. 在您的子类中,您调用super()但是在超类构造函数接受String数组时传入字符串
  3. 在您的子类构造函数中,您尝试将值设置为name,但该变量似乎未在您的子类中实例化。在你的超类中,它被创建(在构造函数内部,因此需要移出)作为私有变量,因此无法在子类中直接访问它。您需要使用公共/受保护的getter方法或将变量本身设为公共或受保护。
  4. 变量name应该是String而不是它自己的对象。它不需要使用new关键字声明,因为它仅在创建对象时使用。只需做String name = variableName;即可。对于子类构造函数
  5. 中的所有变量也是如此

答案 3 :(得分:0)

虽然我不能帮助太多,因为你没有提供错误信息,但我可以解释一下。

Java中的super关键字是对派生类的父类的引用。它的主要用途是当您尝试调用父类的方法或构造函数的版本时。

例如,如果我们有一个基类A,那么派生类B就是这样......

public class A
{
    public A()
    {
        //Constructor
    }

    public void display()
    {
        System.out.println("TEST");
    }
}

public class B extends A
{
    public B()
    {
        super();
    }

    public void display()
    {
        super.display();
    }
}

super()的构造函数中对B class的调用将调用A class构造函数来执行。

与同一族的类之间的重写方法类似,您可以使用父方法执行调用super,就像我在重写的display方法中所写的一样。

希望有所帮助!