我有一个任务,我需要添加2个构造函数,并从中分离出来,还列出了变异子。然而,我认为大多数构造函数都是变种人:正如本文所示。所以我很困惑,对于变异子方法,我需要做什么?目前,我为施工人员提供以下服务:
//Constructors
public Species() {
speciesName = "Balaenoptera musculus";
population = 15000;
growthRATE = -0.12;
if (endangered(growthRATE) == true) {
status = "endangered";
} else {
status = "not endangered";
}
}
public Species(String name, int populationSize, double GR) {
speciesName = name;
population = populationSize;
growthRATE = GR;
if (endangered(GR) == true) {
status = "endangered";
} else {
status = "not endangered";
}
}
public Species(Species species) {
speciesName = species.getSpeciesName();
population = species.getPopulation();
growthRATE = species.getGrowthRate();
if (endangered(growthRATE) == true) {
status = "endangered";
} else {
status = "not endangered";
}
}
根据评论:
以下是我尝试过的,但它会导致以下错误
PrintStream类型中的print(布尔)方法不适用于参数(void)
在这条主线上:
Species O5 = O1;
System.out.print(O5.changeSpeciesName("Gorilla beringei"));
方法如下:
public void changeSpeciesName(String newSpeciesName) {
speciesName = newSpeciesName;
}
构造函数的全部要点是初始化实例,这需要设置字段——所以你会认为构造函数是一个变异子,对吗?这有点技术性,但是一个变种人会专门改变现有实例上字段的值,而构造函数会创建该实例。很多时候,构造函数确实“变异”了它正在创建的实例——但它是一个构造函数,而不是变异器。
另一方面,Mutators是专门用来更改实例属性的方法。例如:
public void setName(String name) {
this.name = name;
}
我不知道你的任务是什么,但我有一种感觉,你被告知要编写mutator方法,然后在构造函数中调用它们。例如
speciesName = "Balaenoptera musculus";
speciesName = name;
speciesName = species.getSpeciesName();
你应该这么做
setName("Balaenoptera musculus");
setName(name);
setName(species.getSpeciesName());
基本上,与其让构造函数自己更改变量,不如调用类的mutator来更改变量。
人们会告诉你这样做的一般原因是出于对“如果我们改变名称的设置方式会怎么样”这样的问题的担忧这样,如果有什么改变,我们只需要在一个地方改变它:mutator函数setName()
。否则,我们将不得不更改每个构造函数,这是两个额外的更改——我们可能会忘记其中一个,这将创建一个bug。
但是,在构造函数中使用方法调用时,请确保所调用的方法不能被派生类重写。这可能会导致不期望的行为,因为代码可能会使用部分初始化的对象。结果错误很难找到,因为代码看起来不错,但并没有达到预期的效果。
通过在方法声明中使用final,可以避免此类问题
public final void setName(String name) {
this.name = name;
}
或者通过避免构造函数中的方法调用。
问题内容: 我有两个可以很好地编译的构造函数,但是我希望Java抱怨歧义的可能性。 是什么赋予了? 问题答案: Java允许这些方法存在,因为它有关于如果两种方法都适用将被调用的规则。具体来说,将选择固定arity方法(不带),而不是可变arity方法(带)。 的JLS,第15.12.2,确定这是选择方法时指出以下: 第一阶段(第15.12.2.2节)执行重载解析,不允许装箱或拆箱转换,也不允许使
JavaScript 中的构造函数和其它语言中的构造函数是不同的。 通过 new 关键字方式调用的函数都被认为是构造函数。 在构造函数内部 - 也就是被调用的函数内 - this 指向新创建的对象 Object。 这个新创建的对象的 prototype 被指向到构造函数的 prototype。 如果被调用的函数没有显式的 return 表达式,则隐式的会返回 this 对象 - 也就是新创建的对象
如果我决定使用一个非线程安全的集合并同步它的访问,我是否需要同步构造函数中的任何突变?例如,在下面的代码中,我知道对列表的引用在构造后对所有线程都是可见的,因为它是最终的。但我不知道这是否构成安全发布,因为构造函数中的add没有同步,而且它正在ArrayList的elementData数组中添加一个引用,这是非最终的。
问题内容: 我在一个Activity中有一个IntentService,当我尝试调用该服务时,它将引发此错误,我发现这很奇怪,因为如果我声明了空的构造函数。 错误: AndroidManifest.xml 活动: 问题答案: 你是一个内部阶级。如果要将其保留在内部,请将其更改为static: 您可能需要阅读不同类型的嵌套类。google的第一个链接:http : //docs.oracle.com
本文向大家介绍请解释Java中的概念,什么是构造函数?什么是构造函数重载?什么是复制构造函数?相关面试题,主要包含被问及请解释Java中的概念,什么是构造函数?什么是构造函数重载?什么是复制构造函数?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JAVA构造函数 当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一
主要内容:默认拷贝构造函数拷贝和复制是一个意思,对应的英文单词都是 。 对于计算机来说,拷贝是指用一份原有的、已经存在的数据创建出一份新的数据,最终的结果是多了一份相同的数据。例如,将 Word 文档拷贝到U盘去复印店打印,将 D 盘的图片拷贝到桌面以方便浏览,将重要的文件上传到百度网盘以防止丢失等,都是「创建一份新数据」的意思。 在 C++ 中,拷贝并没有脱离它本来的含义,只是将这个含义进行了“特化”,是指用已经存在的对