因此,主要的动物类别将生成som母牛,但是实例化是在母牛类别中进行的。我的问题是:此代码模式真的“正常”吗?还是应该将Cow类重命名为“ CowHandler”,而是使用一个名为cow的子类?

CowHandler将具有一个字段List<Cow> cows;,而Cow类仅String name;

实例化自身对于牛类来说感觉很奇怪,例如,从未在牛类中使用带有牛列表的字段。
这是到目前为止的代码:

动物类

import java.util.List;

public class Animal
{
    public static void main(String[] args)
    {
        Animal animal = new Animal();
        animal.init();
    }


    private void init()
    {
        Cow cow = new Cow();

        int count = cow.getCows().size();
        System.out.println("Cows in list before: " + count);

        List<Cow> manyCows = cow.makeSomeCows();

        for (Cow c : manyCows)
        {
            System.out.println(c.getName());
            System.out.println("Children?: " + c.getCows().size());
            System.out.println("");
        }

        count = cow.getCows().size();
        System.out.println("Cows in list after: " + count);
    }
}


牛类

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

public class Cow
{
    private String name;
    private List<Cow> cows;

    public Cow()
    {
        cows = new ArrayList<Cow>();
    }


    public List<Cow> makeSomeCows()
    {
        for (int i=0; i<10; i++)
        {
            Cow cow = new Cow();
            cow.name = "Tiny cow " + ((char)(i + 65));
            cows.add(cow);
        }
        return cows;
    }


    public String getName()
    {
        return this.name;
    }


    public List<Cow> getCows()
    {
        return this.cows;
    }

}


输出:

Cows in list before: 0
Tiny cow A
Children?: 0

Tiny cow B
Children?: 0

Tiny cow C
Children?: 0

Tiny cow D
Children?: 0

Tiny cow E
Children?: 0

Tiny cow F
Children?: 0

Tiny cow G
Children?: 0

Tiny cow H
Children?: 0

Tiny cow I
Children?: 0

Tiny cow J
Children?: 0

Cows in list after: 10

最佳答案

仅当每个private List<Cow> cows;实例都有与之相关的Cow列表(例如,该Cow的子级)时,在Cow类中具有Cow实例变量才有意义。

如果目的是要包含您创建的所有Cow的容器,则Cow类中的实例变量是错误的,因为每个Cow对象将具有其自己的List<Cow>

您可以在private static List<Cow> cows;类中使用Cow静态变量来保存所有Cow实例,并使用相应的static方法对其进行访问,但是将列表放在 s,例如Cow。但是请注意,CowHandler成为Cow的子类没有任何意义。 CowHandler不是Cow

关于java - Java OOP实例化自己还是添加子类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47388308/

10-11 12:23