Java类的层次结构

Java类的层次结构,java,Java,我制作了一个动物园的模型。在我的动物园里,我只有鸟。在我的主课动物园里,我把一只动物放在笼子里。目前,笼子里可以增加无限数量的鸟。但每个笼子里的鸟不应该超过两只。我该如何进行此修订 主类 public class Zoopark { public static void main(String[] args) { Bassein V1 = new Bassein(); Bird B = new Bird("Vala", 100, true); V1.putAnimal

我制作了一个动物园的模型。在我的动物园里,我只有鸟。在我的主课动物园里,我把一只动物放在笼子里。目前,笼子里可以增加无限数量的鸟。但每个笼子里的鸟不应该超过两只。我该如何进行此修订

主类

public class Zoopark {

public static void main(String[] args) {

    Bassein V1 = new Bassein();
    Bird B = new Bird("Vala", 100, true);
    V1.putAnimal(B);
    Bird C = new Bird("Lilu", 100, true);
    V1.putAnimal(C);
    Bird D = new Bird("Abara", 100, true);
    V1.putAnimal(D);

    OpenCage V2 = new OpenCage();
    Hippo E = new Hippo("Kala", 1000, true);
    V2.putAnimal(E);        
    Hippo I = new Hippo("Nala", 1000, true);
    V2.putAnimal(I);
    Hippo F = new Hippo("Mala", 1000, true);
    V2.putAnimal(F);
    Hippo U = new Hippo("Ala", 1000, true);
    V2.putAnimal(U);
}

}
用笼子上课

import java.util.ArrayList;
import java.util.List;

public class Valers {

private final static int CageLimit=2;

List<Animals> result = new ArrayList<Animals>();

public void putAnimal(Animals a) {

    int numAnimals=result.size();

    if (numAnimals>=CageLimit) { 
       System.out.println("This cage is full!");
       System.out.println(" ");
    }
    else {
       this.result.add(a);
       System.out.println("Animal added in cage");
       System.out.println("  ");
    }
}

public int getCageAnimals() {
    return result.size();
}

}
OpenCage类别:

public class Bassein extends Valers {

}
public class OpenCage extends Valers {

}
抽象类动物:

abstract public class Animals {

private String name;
private int weight;
// is this boy?
private boolean isMale;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return weight;
}

public void setAge(int age) {
    this.weight = weight;
}

public boolean isMale() {
    return isMale;
}

public void setMale(boolean isMale) {
    this.isMale = isMale;
}

public Animals(String name, int weight, boolean isMale) {
    this.name = name;
    this.weight = weight;
    this.isMale = isMale;
}

}
类鸟:

public class Bird extends Animals {



public Bird(String name, int weight, boolean isMale) {
    super(name, weight, isMale);
    System.out.println(name + " " + weight + " " + isMale);
}
}
与河马一起上课:

public class Hippo extends Animals {

public Hippo(String name, int weight, boolean isMale) {
    super(name, weight, isMale);
    System.out.println(name + " " + weight + " " + isMale);
}
}
现在输出:

Vala 100 true
Animal added in cage

Lilu 100 true
Animal added in cage

Abara 100 true
This cage is full!

Kala 1000 true
Animal added in cage

Nala 1000 true
Animal added in cage

Mala 1000 true
This cage is full!

Ala 1000 true
This cage is full!
应该是:

Vala 100 true
Animal added in cage

Lilu 100 true
Animal added in cage

Abara 100 true
This cage is full

Kala 1000 true
Animal added in cage

Nala 1000 true
Animal added in cage

Mala 1000 true
Animal added in cage

Ala 1000 true
Animal added in cage

谢谢大家!

在将动物添加到Valers.putAnimal()中之前添加此项:


虽然@LW001的答案会给出正确的打印输出,但我相信,从逻辑上讲,您仍然会在笼子中添加第三只动物。对你来说,最好的办法是增加一种检查笼子里是否有动物的方法。然后添加一个if语句,以仅在少于两个动物时添加一个动物。例如:

    import java.util.ArrayList;
    import java.util.List;

    public class Valers {

    private final static int CageLimit=2;

    List<Animals> result = new ArrayList<Animals>();

    public void putAnimal(Animals a) {

        int numAnimals=result.size();

        if (numAnimals>=CageLimit) { 
           System.out.println("This cage is full!");
           System.out.println(" ");
        }
        else {
           this.result.add(a);
           System.out.println("Animal added in cage");
           System.out.println("  ");
        }
    }

    public integer getCageAnimals() {
        return result.size();
    }
}
import java.util.ArrayList;
导入java.util.List;
公务舱{
私有最终静态限制=2;
列表结果=新建ArrayList();
公共动物(动物a){
int numAnimals=result.size();
如果(numAnimals>=CageLimit){
System.out.println(“这个笼子满了!”);
System.out.println(“”);
}
否则{
本.结果.加入(a);
System.out.println(“笼中添加的动物”);
System.out.println(“”);
}
}
公共整数{
返回result.size();
}
}

注意,我为CageLimit包含了一个
私有最终静态int
。这是因为良好的实践要求不要在代码的逻辑中包含“幻数”。因此,在开始时将其初始化为一个不可变值。

您在哪里检查框架的大小以符合您的要求?如果
Bassein
表示“框架”,那么什么是
Valers
?如果
Valers
是一个“有笼子的类”,为什么它包含动物而不是笼子?为什么笼子里没有动物?如果
Valers
是一个“有笼子的类”,为什么
Bassein
(一个“笼子”)是
Valers
的一种类型?Bassein-它是一种笼子,这对一类鸟来说是正确的,但是当我有了更多的类,你在做什么?如果你有更多的类,但仍然想要总共只有两个动物,这就是了。例如,如果你想要两只鸟,但仍然能够把河马放在里面,你可能最好反复浏览列表,只寻找鸟和河马的例子。谢谢。例如,我有两门课:河马和鸟。我希望河马不超过五只,鸟类不超过两只。我怎么知道我有多少动物在一个特定的类?我不可能有更好的措辞比。谢谢!好的,这对笼子一般有效。但当我除了鸟还有河马的时候。你的方法对鸟类和河马有效。但是我希望河马不超过五只,鸟不超过两只。我如何知道我在一个特定的班级里有多少动物?你可能需要改进你的问题。你把不同种类的动物放在同一个笼子里吗?或者您是否为不同的动物设置了不同的笼子?良好的实践还表明,您不应该过度设计代码。首先,常量的命名约定是错误的。第二,通过添加一个常量,您引入了一个间接寻址。现在,如果不向上滚动到
CAGELIMIT
变量,您将无法再看到该方法正在执行的操作。第三,到目前为止,动物的最大数量是一个常数。如果你有一个更大的笼子呢?第四,你有一些代码重复。第五,这里的保护条款(@LW001使用的)会更短,因此更为贴切。六、
getCageAnimals
不返回动物,而是返回动物的数量。简单一点,我有不同的笼子给不同的动物。例如,对于河马,这个开放式笼子;对于鸟类,这个带有网格的笼子。@Wexzuq将笼子的大小传递给笼子的构造函数。使用该选项初始化用于检查限制的cageSize变量。
    import java.util.ArrayList;
    import java.util.List;

    public class Valers {

    private final static int CageLimit=2;

    List<Animals> result = new ArrayList<Animals>();

    public void putAnimal(Animals a) {

        int numAnimals=result.size();

        if (numAnimals>=CageLimit) { 
           System.out.println("This cage is full!");
           System.out.println(" ");
        }
        else {
           this.result.add(a);
           System.out.println("Animal added in cage");
           System.out.println("  ");
        }
    }

    public integer getCageAnimals() {
        return result.size();
    }
}