java - 多态调用取决于变量

标签 java polymorphism

我遇到以下问题。我试图进行多态调用,结果将取决于根据底层类改变值的变量。尝试了不同的事情,但它不起作用。请让我知道应该更改哪些内容。问题是,虽然 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/

相关文章:

java - 何时何地使用 Guice 依赖注入(inject)?

java - 编译器编译其他java文件

java - 如何在 Mockito 中模拟 instanceof

java - 使用空数组创建方法

c++ - 在基类的复制构造函数上调用虚方法时多态性不启动

Java 高低网格游戏

java - 单层感知器训练?

delphi - 如何在兼容的方法指针之间进行转换?

c# - 多态性和转换问题

c++ - 无法初始化指向具有基类右值的子类的指针