Java 继承和线程来修改超值
我的问题是,既然这是一个线程,我需要修改超类(gas)中的一些值,那么有没有办法在run方法中进行修改?据我所知,唯一的办法是做一个例子,但我不能在那里做 这样做的目的是在汽车行驶时降低燃油油位 同样,如果我尝试将一个Car对象写入一个文件,或者Car是需要从serializable扩展的对象,那么serializable实现也可以工作Java 继承和线程来修改超值,java,multithreading,Java,Multithreading,我的问题是,既然这是一个线程,我需要修改超类(gas)中的一些值,那么有没有办法在run方法中进行修改?据我所知,唯一的办法是做一个例子,但我不能在那里做 这样做的目的是在汽车行驶时降低燃油油位 同样,如果我尝试将一个Car对象写入一个文件,或者Car是需要从serializable扩展的对象,那么serializable实现也可以工作 这只是一个例子,我还有另一个名为Bus的类,它们都有不同的运行方法,只需保存一些代码,就可以修改代码,比如,非常抱歉格式不好 在vehicle类中引入fuel的
这只是一个例子,我还有另一个名为Bus的类,它们都有不同的运行方法,只需保存一些代码,就可以修改代码,比如,非常抱歉格式不好
public class Vehicle extends Thread implements Serializable{
private int gas;
public Vehicle(int gas){
this.gas = gas;
}
}//Vehicle
public class Car extends Vehicle{
private int brakes;
public Car(int fuel, int brakes){
super(fuel)
this.brakes = brakes;
}
@Override
public void run(){
//code here
}
}//Car
}//车辆
现在,汽车扩展了车辆,实现了可运行
公共级轿车扩展了车辆的可运行性{
私家车
public Vehicle(int fuel){
this.fuel = fuel;
}
protected void setFuel (int fuel){
this.fuel = fuel;
}
您在Supery类中的变量是私有的,因此它对您的子类不可见。 如果您将其设置为受保护,则它将可见。因此您可以更改该值。
还有一点,我建议为多线程可见性提供一个受保护的同步方法,并避免争用情况。如果它是线程上下文特定的,并且不是由多线程修改的,那么就不需要它。由于您扩展了Vehicle类,gas会自动继承,但由于它是私有成员,您可以实现getter-该变量的setter方法,或者将其作为公共变量。好吧,我理解它并且它工作了,我真的不知道这一点,现在的问题是关于可序列化的实现
serializable
有时被称为“标记接口”,只是说类是可序列化的。序列化要么是通过自动地,或者通过特定的私有方法(因此不是继承的)自定义实现序列化是微不足道的,并不是一种特别有用的方法来继承。您可能需要考虑使用<代码> Runnaby<代码>,而不是继承<代码>线程< /代码>。因为车辆可能实际上不是线程。对于序列化实现,您可以使用同步块。多次同时插入同步的{}块
public Car(int fuel, int brakes){
super(fuel)
this.brakes = brakes;
}
@Override
public void run(){
//code here
setFuel(fuel-1); // update the fuel value
}
}//Car