【问题标题】:How to initialise method of superclass in constructor of subclass如何在子类的构造函数中初始化超类的方法
【发布时间】:2017-01-12 17:25:46
【问题描述】:

超类

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(){
  }
}

子类

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)已经运行方法从Kola的类中调用“paljenje”的方法,您需要同步访问 Put 和访问变量;之后开始“Prelazenje”的方法; 再次,您需要同步访问道路,然后再次更新变量。

【问题讨论】:

  • 问题是:在超类构造函数中初始化Kola(转发她的Put,和标识符)是一个线程运行的方法(通过调用start方法)已经run方法调用了“ paljenje" 来自 Kola 类,您需要同步访问 Put 和访问变量;之后开始“Prelazenje”的方法;再次,您需要同步访问道路,然后再次更新变量。
  • 对不起,我不明白你在问什么。我没有看到Put 类。你需要同步什么? (请参阅寻求帮助和minimal reproducible example
  • 您的代码对我来说没有意义。你想达到什么目的?

标签: java constructor initialization subclass superclass


【解决方案1】:

初始化方法。方法没有状态;您只能调用它们。

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

如果您想确保从您的超类调用该方法给出正确的结果 - 那么您只需确保相应地设置您的超类的字段

目前,您的问题非常很简单:您的子类调用 super();所以你需要一个不带任何参数的构造函数。但是你的超类只有 一个 构造函数——它需要一个参数!

就在那里,另一个错误:

objekat1 = new Thread(objekat1);

意思是:

objekat1 = new Thread(null);

(因为 objekat1 为空“在 =”的右侧。)

当然:您的方法 prelazenje() 和 palenje() ... 仅取决于它们的参数。因此,无论您如何初始化超类,这些方法将始终在给定相同参数的情况下执行相同的操作!

所以,老实说,这里唯一的答案是:请停止你现在正在做的任何事情。退后。在您考虑可运行对象和线程之前,您确实必须了解基础知识。

您的代码表明您对 Java 中的许多重要事情一无所知;同时,您正在尝试构建一些复杂的东西。这不起作用。因为你知道你在做什么。

这部分我们无能为力,只有您可以。

【讨论】:

  • 嗯,还有其他问题。例如:objekat1 = new Thread(objekat1); ...或public Kola(int id1) { id1=0; },更不用说public Smer1(int ) {,它甚至不会编译,但可能是复制粘贴的东西...
  • 是的,同时想到了。
  • +1 表示清晰的话。我想为OP添加提示:如果您在国际论坛上寻求帮助,请用英文命名您的变量和方法。它只是让您更容易遵循您正在尝试做的事情。
  • @Fildor 当中午左右已经达到每日 200 个限制时,这是一件好事。可以退一步,轻松一点;并花更多的时间告诉新手一些真相;而不是通常的 downvote-closerequest-next 过程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
相关资源
最近更新 更多