这个Java代码中有错误吗?
这个代码有错误吗这个Java代码中有错误吗?,java,Java,这个代码有错误吗 “其他出生年份”错了吗?我的老师说这是错误的,但对我来说效果很好。你必须让老师解释为什么他们认为这是错误的(这可能是一个风格问题,甚至是一个误解),这样你才能从中学习 最终这个人会影响你的成绩。这是与他们进行积极互动的绝佳机会。你的老师越是亲自教你,你掌握学科的机会就越大 另一方面,如果当你被告知有问题时,你会私下去问一般的互联网社区,你有可能被告知你是对的,你最终会产生一种比你的老师更优越的错误感觉,这将适得其反。这是错误的,因为你正在访问一个私人会员(您声明了另一个对象的p
“其他出生年份”错了吗?我的老师说这是错误的,但对我来说效果很好。你必须让老师解释为什么他们认为这是错误的(这可能是一个风格问题,甚至是一个误解),这样你才能从中学习 最终这个人会影响你的成绩。这是与他们进行积极互动的绝佳机会。你的老师越是亲自教你,你掌握学科的机会就越大
另一方面,如果当你被告知有问题时,你会私下去问一般的互联网社区,你有可能被告知你是对的,你最终会产生一种比你的老师更优越的错误感觉,这将适得其反。这是错误的,因为你正在访问一个私人会员(您声明了另一个对象的
private int yearOfBirth
),尽管类类型相同。您应该使用您定义的公共getter:yearOfBirth=other.getYearOfBirth()
出生年份
是一个私有int。因此对其他.yearofBirth
的调用可能会失败…正如您所发现的,它会工作。不过,我怀疑存在一个根本性的误解
我的灵力告诉我,你的导师期望代码更像以下:
class Creature {
private int yearOfBirth=10;
public void setYearOfBirth(int year) {
yearOfBirth = year;
}
void setYearOfBirth(Creature other) {
yearOfBirth = other.yearOfBirth; // is this correct it compiles fine
}
int getYearOfBirth() {
return yearOfBirth;
}
public static void main(String args[])
{
Creature c = new Creature();
c.setYearOfBirth(89);
Creature d = new Creature();
c.setYearOfBirth(d);
System.out.println(c.yearOfBirth);
}
}
final class Creature
误解是您只创建了一个类—您的主应用程序类。这实际上使yearOfBirth
成为一种混合全局值,您可以从主方法访问它。在更典型的设计中,bioter
是一个完全独立于主方法的类。在这种情况下,您必须只能通过其公共
界面访问生物
。您将无法直接访问其私有字段
(请注意:是的,我知道我在简化。)不,它一点问题都没有 看,这取决于观众的意见。但对于给定的上下文,这段代码可能是完美的 对于其他一些上下文,这可能是不正确的。因此,这取决于如何使用
- 直接从另一个实例访问私有成员是正确的(但并不总是可取的,例如,当您正在子类化时),这就是为什么它首先是
。您说的是“嘿,这是我的,我知道如何使用它”private
- 对另外两个方法使用
access修饰符表示您的意图是它们不应该被包外的其他类使用default
class Creature {
private int yearOfBirth=10;
public void setYearOfBirth(int year) {
yearOfBirth = year;
}
public void setYearOfBirth(Creature other) {
yearOfBirth = other.yearOfBirth;
}
public int getYearOfBirth() {
return yearOfBirth;
}
}
class Program {
public static void main(String args[]) {
Creature c = new Creature();
c.setYearOfBirth(89);
Creature d = new Creature();
c.setYearOfBirth(d);
System.out.println(c.yearOfBirth); // This will not compile
}
}
如果你想让它可以继承,你可能需要查看出生年份属性的get/set,但是他们认为它对我来说是完美的
现在这里最重要的是您了解代码的每个部分都做了什么,以及它如何影响其行为
你不应该仅仅靠运气来编写代码(对不起,我不知道正确的表达方式是什么),但你应该知道每次键入内容时都在做什么,以及打算如何使用它们。我看到两个“问题”,尽管我不太愿意称它们为错误:
class Creature {
private int yearOfBirth=10;
public void setYearOfBirth(int year) {
yearOfBirth = year;
}
void setYearOfBirth(Creature other) {
yearOfBirth = other.yearOfBirth; // is this correct it compiles fine
}
int getYearOfBirth() {
return yearOfBirth;
}
public static void main(String args[])
{
Creature c = new Creature();
c.setYearOfBirth(89);
Creature d = new Creature();
c.setYearOfBirth(d);
System.out.println(c.yearOfBirth);
}
}
final class Creature
现在,您对yearOfBirth的所有访问都是通过公共getter方法进行的,这有助于封装,并且在主方法移动到另一个类时可以防止代码中断
此外,这还有一个额外的好处,即明确代码的意图,当您开始编写代码供他人维护和修改时,这一点变得越来越重要。我没有发现任何错误
代码之所以有效,是因为一个实例或类可以访问同一类的其他实例的私有成员。这是出于设计。Upvoting(不知道为什么被否决)-对我来说,这似乎是一个非常好的入门级问题。你的老师指出,你正在直接访问
private
变量yearOfBirth
,而不是通过getYearOfBirth()
(JavaBean访问)。您能够这样做并编译它的唯一原因是,同一类的任何实例都可以访问private
数据。如果您试图直接从一个nonreature
类访问yearOfBirth
,编译器肯定会抛出一个错误,您必须使用public
方法dgetYearOfBirth()
。你可以问老师,或者你可以问这里成千上万的Java程序员,他们中的许多人会详细地告诉你问题是什么,可能到了你想知道的程度