首页 > 解决方案 > 继承、增强循环和数组列表运行不正常

问题描述

我正在尝试在这里整理一些东西,但它无法正常工作。我认为每次通过循环,循环都会为每个类成员更新和继承。相反,它打印了 4 次“成员”方法。

import java.util.ArrayList;

public class toolband
{
    public static void noise()
    {
        System.out.println("abc");
    }

static class member extends toolband
{

    public static void noise()
    {
        System.out.println("xyz");
    }
}

static class maynard extends member
{
String namemaynard = "maynard";

public static void noise() 
    {
        System.out.println("pow pow");
    }
}

static class adam extends member
{
    String nameadam = "adam";
    public static void noise() 
    {
        System.out.println("da dun da dun");
    }
}
static class danny extends member
{
    String namedanny = "danny";
    public static void noise()
    {
        System.out.println("smash smash smash");
    }
}
static class justin extends member
{
    String namejustin = "justin";
    public static void noise()
    {
        System.out.println("womp wa wa wo wo womp");
    }
}

public static void main (String [] args)
{
ArrayList <member> members = new ArrayList <member> (4);

member m = new maynard();
member a = new adam();
member d = new danny();
member j = new justin();

members.add(m);
members.add(a);
members.add(d);
members.add(j);

for (member i : members)
i.noise();

}
}

有人可以帮助我理解我做错了什么。我应该制作这些所有静态方法吗?

标签: loopsinheritancearraylist

解决方案


问题是toolband中的noise方法是静态的。在java中静态方法没有被覆盖。

为了使这项工作更改噪声方法签名为 public void noise() 并且在覆盖的子类中相同并且它可以工作。

public class toolband {
    public void noise() {
        System.out.println("abc");
    }
}

class member extends toolband {

    public void noise() {
        System.out.println("xyz");
    }
}

class maynard extends member {
    String namemaynard = "maynard";

    public void noise() {
        System.out.println("pow pow");
    }
}

class adam extends member {
    String nameadam = "adam";

    public void noise() {
        System.out.println("da dun da dun");
    }
}

class danny extends member {
    String namedanny = "danny";

    public void noise() {
        System.out.println("smash smash smash");
    }
}

class justin extends member {
    String namejustin = "justin";

    public void noise() {
        System.out.println("womp wa wa wo wo womp");
    }

}

推荐阅读