如何在子类的构造函数中初始化超类的方法

时间:2016-09-05 10:45:24

标签: java constructor initialization subclass superclass

父类

public class Kola {
    int id;
    Put put = new Put(id, id);
    public Kola(int id1) {
        id1=0;
    }
  public int prelazenje(int p){
     return p = (int)(5 + (Math.random() * (10 - 5)));
  }
  public int paljenje (int pa){
    return pa=(int)(5 + (Math.random() * (10 - 5)));
  }
  public void start(){
  }
}

SubClass

public class Smer1 extends Kola implements Runnable {
    Thread objekat1;    
    public Smer1(int ) {
        super();
        objekat1 = new Thread(objekat1);
        objekat1.start();   
    }
    @Override
    public void run() {
    }
}

问题是:

在超类构造函数中初始化Kola(转发她的Put和标识符)是一个运行线程的方法(通过调用方法start)run方法从Kola类中调用“paljenje”的方法,您需要同步访问Put和访问变量;之后开始“Prelazenje”的方法; 再次,你需要同步访问道路,但然后再次更新变量。

1 个答案:

答案 0 :(得分:3)

初始化方法。方法没有状态;你只能调用

换句话说:方法 的行为取决于它接收的参数;以及它有权访问的字段

如果要确保从超类中调用方法可以得到正确的结果 - 那么您只需要确保相应地设置超类的字段

目前,您的问题非常简单:您的子课程调用 super();所以你需要一个没有任何参数的构造函数。但是你的超级班只有一个构造函数 - 这需要一个参数!

就在那里,另一个错误:

objekat1 = new Thread(objekat1);

转换为:

objekat1 = new Thread(null);

(因为objekat1为空"在="的右侧;)

当然:你的方法prelazenje()和palenje()......只取决于他们的参数。所以,无论你如何初始化你的超类,这些方法都会总是在给定相同参数的情况下做同样的事情!

老实说,这里有道理的唯一答案是:请立即停止您正在做的事情。退后。在你考虑runnables和线程之前,你真的必须学习关于基础知识。

您的代码显示您不了解Java中的许多重要事项;与此同时,你正试图建立一些复杂的东西。 不起作用。因为你有没有线索你在做什么。

我们无法为您提供帮助,只有您可以。

相关问题