我有一个类Shape2D
,在那个类中,我有计算圆面积circleArea
的方法,也有类CircleArea
,我在其中存储了我的方法所需的所有属性。另外,我的课程CircleArea
扩展了课程Shape2D
。因此,如何实现从类Shape2D
到类CircleArea
的方法。
这是我的Shape2D
班:
public class Shape2D {
public static void areaCircle(Circle c) {
double circleArea = Math.pow(c.getR(), 2) * Math.PI;
}
}
这是我的Circle
课:
public class Circle extends Shape2D {
private double r;
public Circle() {
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
答案 0 :(得分:0)
要实现Shape2D
类中Circle
类中的一种方法,可以执行以下操作:
Shape2D.areaCircle(circleObject);
以上行可以在Circle
类中调用。不要忘记将实际的circle
对象传递给函数。
答案 1 :(得分:0)
您在2D形状内有一个静态方法,这意味着您可以在任何类中使用它,而无需实例化2DShape。这也意味着您不需要circle类来扩展2DShape来使用此方法,但是我想您正在为OO范例寻求父子关系。如果您不希望从任何类中调用该方法,请从该方法中删除static
。如果您希望在Circle类构造函数中静态调用它,请首先将r实例化为某种东西,然后将其传递给静态方法调用。
public class Circle extends Shape2D {
private double r;
public Circle() {
r=1;
Shape2D.areaCircle(this);
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
请注意,您的静态函数实际上不会返回任何内容,因此它会计算面积并丢失值。您可以通过更改{{1}的返回类型来在shape2D内部修复此问题。 }代替void翻倍,并适当地返回结果。
circleArea
或非静态地,并受到公众的保护(两者均可行)
public static double areaCircle(Circle c) {
double circleArea = Math.pow(c.getR(), 2) * Math.PI;
return circleArea;
}
如果您想做同样的事情,但是从方法中删除了静态标志,则可以使用protected double areaCircle(Circle c) {
double circleArea = Math.pow(c.getR(), 2) * Math.PI;
return cricleArea;
}
来调用父方法。
super
现在,如果您想将区域实际存储在这个circleObject内,则可以为Circle类创建另一个属性,并像这样修改构造函数。也许甚至添加一个接受一个半径为int参数的构造函数(或者在将来的某个区域中,可以通过某种方式区分两个可以获取半径值的区域)。
public class Circle extends Shape2D {
private double r;
public Circle() {
r=1;
super.areaCircle(this);
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
还值得一提的是,您应该查看所创建的这些方法的范围以及要使用它们完成的工作。例如,您可以将public class Circle extends Shape2D {
private double r;
private double area;
//Default Constructor
public Circle() {
r=1;
this.area = super.areaCircle(this);
}
//Radius constructor
public Circle(double rad) {
this.r = rad;
this.area = super.areaCircle(this);
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
方法定义为public,此时可以将其定义为protected并在这种情况下具有相似的功能。受保护意味着该方法可以在类以及所有子类(父类的子代,例如circle)中使用。您可以阅读有关这些闭包here的信息。另外,在处理对象继承时,您应该养成使用circleArea
关键字来引用您实际希望检索的方法/属性的习惯。 Info on this keyword。
我知道这很重要,但是如果您有任何疑问,请随时发表评论!