Java 无存取器方法和mutator方法
我的讲师告诉我,我班上没有访问器和变异器方法,但我不知道他的意思,因为我确实包括了访问器和变异器方法 我能想到的两个问题是: 1.我的变量必须是针对每个单独的变量,而不是同时针对所有的变量 2.我的子类需要我的超类变量的访问器和mutator方法 我确实问过我的讲座,但他说你自己去弄清楚,我没有把toString包括在内Java 无存取器方法和mutator方法,java,Java,我的讲师告诉我,我班上没有访问器和变异器方法,但我不知道他的意思,因为我确实包括了访问器和变异器方法 我能想到的两个问题是: 1.我的变量必须是针对每个单独的变量,而不是同时针对所有的变量 2.我的子类需要我的超类变量的访问器和mutator方法 我确实问过我的讲座,但他说你自己去弄清楚,我没有把toString包括在内 abstract class TwoD implements Shape { //protected instance variables as the
abstract class TwoD implements Shape
{
//protected instance variables as the subclasses will use them
protected int a;
protected int b;
protected int c;
//default constructor
public TwoD() {}
//constructor for circle
public TwoD(int a)
{
this.a = a;
}
//constructor for rectangle
public TwoD(int a, int b)
{
this.a = a;
this.b = b;
}
//constructor for triangle
public TwoD(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
//copy constructor
public TwoD(TwoD td)
{
this (td.a, td.b, td.c);
}
//accessor methods to get variables
public int getA()
{
return a;
}
public int getB()
{
return b;
}
public int getC()
{
return c;
}
//mutator methods to set variables
public void setA(int a)
{
this.a = a;
}
public void setAB(int a, int b)
{
this.a = a;
this.b = b;
}
public void setABC(int a, int b, int c)
{
this.a = a;
this.b = b;
this.c = c;
}
class Circle extends TwoD
{
//default constructor
public Circle() {}
public Circle(int radius)
{
super(radius);
}
//method to calculate area of circle
@Override
public double area()
{
return Math.PI * a * a;
}
//method to get calculated area
@Override
public double getArea()
{
return area();
}
访问器方法通常称为getter,而mutator方法通常称为setter Java世界中广泛使用的一种模式是
- 将字段(实例变量)设置为私有
- 如果需要访问器方法,请添加一个getter
public int getA() { return this.a; }
- 如果需要mutator方法,请添加setter
public void setA(int a) { this.a = a; }
您还需要使用自描述性名称
a
、b
和c
应该改名为更好地描述这些变量所代表的内容。您自己已经找到了答案。你的讲师指的是你在第1点和第2点中描述的内容。您需要做的就是去掉setAB
和setABC
并添加setter方法。(单词“accessor”和“mutator”分别是getter和setter的同义词)所以我仍然需要子类的accessor和mutator方法,即使我已经在我的超类中使用了它?据我所知,在我的TwoD超类中,我已经有了变量a、b和c的get和set方法。我没有理由在我的Circle子类中为相同的变量添加另一个get and set方法。这不是必需的,因为Circle
扩展了TwoD
中所有非私有非静态方法。我建议您将变量字段也设置为私有。没有必要为子类提供对它们的直接访问,因为它们可以调用getter和setter方法,如果您不这样做,那么将来更改行为将变得更加困难。@AaronDavis通常我会,但我目前正在遵循讲师提供的uml图。
public void setA(int a) {
this.a = a;
}