gpt4 book ai didi

java - 多态调用取决于变量

转载 作者:行者123 更新时间:2023-12-01 17:33:17 25 4
gpt4 key购买 nike

我遇到以下问题。我试图进行多态调用,结果将取决于根据底层类改变值的变量。尝试了不同的事情,但它不起作用。请让我知道应该更改哪些内容。问题是,虽然 c.w 既读取局部变量 w(默认为 0),又读取相应类中的变量,但它始终默认为 0。代码如下:

class Cycle{
private int w = 0;
public void move(){
System.out.println("Cycle moving");
}
public int wheels(Cycle c){
switch (c.w){

case 1: return 1;
case 2: return 2;
case 3: return 3;
default: return 0;
}
}
}
class Unicycle extends Cycle{
public int w = 1;
public void go(){
System.out.println("Unicycle go");
}
}
class Bicycle extends Cycle{
public int w = 2;
public void go(){
System.out.println("Bicycle go");
}
}
class Tricycle extends Cycle{
public int w = 3;
public void go(){
System.out.println("Tricycle go");
}
}

public class TestCycle {

public static void ride(Cycle c){
c.move();
int now = c.wheels(c);
System.out.println(now);

}

public static void main(String[] args){
Bicycle b = new Bicycle();
ride(b);
Unicycle u = new Unicycle();
ride(u);
Tricycle t = new Tricycle();
ride(t);
}

}

最佳答案

您的问题(其中之一)是您正在每个子类中重新定义类变量“w”。将其定义为“Cycle”的成员,并让每个子类在其构造函数中正确设置它。

class Cycle{
protected int w;
public void move(){
System.out.println("Cycle moving");
}
public int wheels(){
return w;
}
}

class Unicycle extends Cycle{
public Unicycle() {
w = 1;
}
public void go(){
System.out.println("Unicycle go");
}
}

或者您可以在父类(super class)中定义一个名为“wheels()”的抽象方法,并在子类中重写它。这是一个品味问题。

关于java - 多态调用取决于变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8852275/

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