gpt4 book ai didi

java - 如何与父类(super class)中的实例变量共享方法?

转载 作者:行者123 更新时间:2023-11-29 10:10:36 31 4
gpt4 key购买 nike

我有一个名为 Car 的抽象类。然后我有两个子类,福特和道奇,它们都扩展了汽车。这些子类中的每一个都有一个名为 move() 的方法。此方法中的代码对于福特和道奇是相同的,所以我的直觉自然是将此方法实现放入 Car 父类(super class)中,这样我就不必在我的两个子类中两次使用相同的代码,即获得重复的代码,并且只是在父类(super class)内部的代码中写一次这个方法,每个子类都可以在需要的时候调用它。

现在这是我的...事情:在每个子类的移动方法中,每个子类的实例变量都被操纵。所以你看,即使代码相同,每个 move() 方法中发生的事情取决于特定子类的实例变量的状态。像这样:

abstract class Car {

// I want to put move()-method in here and erase it from subclasses
}


class Ford extends Car {

private int rpm;

public void move(){

dosomestuff + rpm // value of rpm being used here is unique to Ford

}
}

class Dodge extends Car {

private int rpm;

public void move(){

dosomestuff + rpm // value of rpm being used here is unique to Dodge

}
}

我想要这样,并使用子类实例变量在每个子类的父类(super class)中调用 move():

abstract class Car {

move(){
// do stuff that is identical to Ford and Dodge but
// dependent on different instance variables
}
}


class Ford extends Car {

private int rpm;
}

class Dodge extends Car {

private int rpm;

}

我应该在父类(super class) Car 中创建变量吗?但这就是我遇到的问题,因为我知道不能实例化抽象类!因此,如果我在这种情况下将 rpm 变量作为 move(rpm) 方法中的参数传递,而我仅在 Car 类中实现了 move(),我将不得不返回rpm 变量以取回其操纵值。这行得通,一次实例变量形成一个子类。问题是,移动方法取决于几种不同类型的变量。所以我每次都必须将几个变量返回给子类,但我不确定该怎么做。

我很困惑。我怎样才能将我的子类中的这个“重复代码”压缩到父类(super class) Car 中,并且仍然能够操作从 Car 类继承的不同子类的实例变量?我是否将它们作为参数传递并返回它们?我用 get-set 方法做些什么吗?我不确定...

最佳答案

使用 protected 变量

abstract class Car {
protected int rpm;
move(){

// ACCESS RPM HERE, which would be specific to implementing class
}
}


class Ford extends Car {
}

class Dodge extends Car {
}

由于变量 rpm 现在受到保护,Car 的子类可以访问它,并且当您实例化 FordDodge,它会有自己的 rpm 值。

有道理吗?

关于java - 如何与父类(super class)中的实例变量共享方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37323933/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com