Java OOP实例化self还是添加子类?
因此,主animal类将生成som cows,但实例化是在cow类中进行的。我的问题是:这个代码模式真的“ok”吗?或者cow类应该被重命名为“CowHandler”,而不是有一个名为cow的子类 CowHandler将有一个字段Java OOP实例化self还是添加子类?,java,oop,Java,Oop,因此,主animal类将生成som cows,但实例化是在cow类中进行的。我的问题是:这个代码模式真的“ok”吗?或者cow类应该被重命名为“CowHandler”,而不是有一个名为cow的子类 CowHandler将有一个字段列出奶牛和仅Cow类字符串名称 cow类实例化自己感觉很奇怪,例如,cow类中从未使用包含cows列表的字段。 以下是截至目前的代码: 动物类 import java.util.List; public class Animal { public static
列出奶牛代码>和仅Cow类<代码>字符串名称代码>
cow类实例化自己感觉很奇怪,例如,cow类中从未使用包含cows列表的字段。
以下是截至目前的代码:
动物类
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;
}
}
拥有私有列表Cow
类中的code>实例变量只有在每个Cow
实例都有一个与之相关的Cow
列表时才有意义(例如,该Cow
的子对象)
如果目的是拥有一个包含您创建的所有Cow
的容器,则Cow
类中的实例变量是错误的,因为每个Cow
对象都有自己的列表
您可以使用私有静态列表
Cow
类中的code>静态变量,用于保存所有的Cow
实例,并使用相应的静态
方法来访问它,但是将列表放在Cow
的单独容器中更为合理,例如CowHandler
。但是,请注意,Cow
作为CowHandler
的子类是没有意义的。Cow
不是Cowhandler
是的,将其作为子类也没有多大意义,因为Cow不是Cowhandler。奶牛是一种动物……我想我可以把List cows=new ArrayList(),因为还没有Cow有关系。因此,在cow类中创建cow对象很好?@BakedInhalf您是说列表
将不再是cow
类的实例变量吗?是的,没有禁止在Cow类中创建Cow对象的规则。唯一的潜在缺点是,如果您有Cow的子类,并且希望您的列表
包含这些子类的对象,Cow
将不是创建它们的好地方,因为类不应该知道它的子类。是的,List
将不再是Cow的实例变量。我看到的一个缺点是,我无法从动物类中获得所有的奶牛。我看到了一个场景,我想为cows添加更多的逻辑,并添加或更新它们的属性。例如,除Animal之外的一个类可能希望访问所有奶牛。我可以在班级之间传递一个列表,但这可能不理想?
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