Java 爪哇语;这";关键词正确使用
我的构造函数中有一个使用关键字this的分数类:Java 爪哇语;这";关键词正确使用,java,this,Java,This,我的构造函数中有一个使用关键字this的分数类: public Fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; adjustSigns(); if(this.denominator == 0 ) { throw new FractionException(" Undefined Fra
public Fraction(int numerator, int denominator)
{
this.numerator = numerator;
this.denominator = denominator;
adjustSigns();
if(this.denominator == 0 )
{
throw new FractionException(" Undefined Fraction ");
}
}
我还有一个方法:
public FractionInterface multiply(FractionInterface secondFraction)
{
Fraction second = (Fraction) secondFraction;
Fraction answer = new Fraction ((numerator * second.numerator), (denominator * second.denominator));
answer.reduceToLowestTerms();
return answer;
}
在编译和运行时,上述方法可以正常工作,但此版本:
public FractionInterface multiply(FractionInterface secondFraction)
{
Fraction second = (Fraction) secondFraction;
Fraction answer = new Fraction ((this.numerator * second.numerator), (this.denominator * second.denominator));
answer.reduceToLowestTerms();
return answer;
}
我的问题是哪一个是正确的??如果在我的构造函数中使用“this”关键字,我是否也必须在我的方法中使用它??再说一次,他们都工作得很好,做了他们应该做的事情,但我想知道哪种方式才是正确的方式。谢谢。如果要区分局部变量和同名成员,则必须明确使用
。否则,它是可选的
如果没有this.
前缀,您的构造函数不会将passes值分配给实例成员,因为方法参数会隐藏实例成员。如果为参数指定不同的名称,则可以不使用this.
:
public Fraction(int num, int denom)
{
numerator = num;
denominator = denom;
...
}
两种multiply
版本相同 您提到的两种情况都可以
使用this
是一个很好的实践,因为它更具可读性,因为我们的英语思维方式,当我们说this时。一些变量
,我们会在脑海中看到当前课堂中的一些变量
这个
关键字也有助于避免变量阴影我认为您对“this”关键字的工作原理有点困惑
让我举个例子:
这个
同:
public class testing {
private int a;
private int b;
testing(int x,int y){
this.a = x;
this.b = y;
}
}
当然,如果我们这样做的话,第二个问题更容易解决:
public class testing {
private int a;
private int b;
testing(int x,int y){
a = x;
b = y;
}
}
在构造函数(或setters)中使用this
通常用于消除变量名称的歧义。根据this
,两者都是正确的。这两种multiply
实现的更大问题在于它们都在撒谎:它们声称接受任何实现FractionInterface
的东西,但事实上它们只接受分数
和分数
子类的实例。正确的实现可以使用FractionInterface
(或者声明类型为Fraction
的参数)。但是在这个
:在可选的情况下使用这个
有两种想法:一种是学校觉得既然没有必要,就只需要额外的键入/文本,学校认为这有助于澄清问题。如果你不使用<代码>这个< /代码>,很容易认为<代码>分子> <代码>是一个函数参数或局部变量,而不是一个实例字段。.为什么演员阵容不正确??根据我的教授,如果我想将引用参数FractionInterface用作分数,我必须将其向下转换为分数。@lrod408该转换可能会引发ClassCastException,因为在转换之前,您没有验证secondFraction
是否是分数的实例。如果多个类实现了细分接口
,其中一些类的转换将失败。@T.J Crowder,谢谢你的提醒。这一次,只有Fraction
类实现了FractionInterFace
,但这仍然是个好消息。再次感谢:)
public class testing {
private int a;
private int b;
testing(int x,int y){
a = x;
b = y;
}
}