我正在学习类和对象,我正在使用引用变量,并访问对象的数据和方法。在我的教科书中,我们创建了一个程序,在给定半径的情况下计算圆的面积。
它们声明对象引用变量,创建一个对象,并在此处为变量分配引用:
Circle myCircle = new Circle();
他们后面给出了一个寻找区域的例子(getArea()
*只返回给定半径的区域):
System.out.println("Area is " + new Circle(5).getArea());
5
(括号中的数字)是半径的输入吗? getArea()
括号中呢? Circle()
没有参数,那么你怎么能在()中有一个数字呢? * getArea()
的代码:
顺便说一下,如果里面只有一个陈述,你能摆脱括号吗?
double getArea()
{
return radius * radius * Math.PI;
}
请原谅可怕的格式 - 我无法使用Ctrl-K,有人可以为我编辑它。
答案 0 :(得分:1)
5(括号中的数字)是半径的输入吗?
System.out.println("Area is " + new Circle(5).getArea());
不完全。
这是传递给Circle
构造函数的参数,该构造函数很可能非常重视radius
字段。
如果是这样,为什么不在getArea()括号中?
getArea()
是Circle的实例方法。它依赖于已经具有半径信息的Circle实例的状态
因此将半径参数传递给getArea()
是没有意义的。
如果你在Circle
类中使用实用程序静态方法来根据半径计算区域,那将是有意义的。
例如:
public static double computeArea(double circleRadius){
...
}
你可以用这种方式调用它:
double area = Cicle.getArea(5.5);
此外,Circle()没有参数,所以你怎么能有一个数字 在()反正?
如果没有接受半径信息的Circle
构造函数,则调用new Circle(5)
无法编译。所以它当然需要一个。
您应该定义Circle
构造函数,例如:
public class Circle{
...
private double radius;
public Circle(double radius){
this.radius = radius;
}
}
顺便说一句,如果只有一个括号,你能摆脱括号吗? 声明里面?
括号()
是指用于声明方法和构造函数的Java语言规范
声明方法时,无论如何都需要它。
答案 1 :(得分:0)
我将尝试深入解释:
public class Circle {
// this variable can access only inside class
private final double radius;
// constructor for class Circle
public Circle(double rad) {
radius = rad;
}
// method of class Circle - can be access outside
public double area() {
return radius*radius*Math.PI;
}
}
当您将类Circle实例化为Circle circle5 = new Circle(5);
时,您现在获得了带有封装参数radius = 5
的类Circle实例,您不知道任何详细信息,只需调用方法double area = circle5.area()
即可获得圆圈区域(rad*rad*Pi
)。
这大大降低了复杂性。即便在这个非常简单的例子中。
现在你可以打印结果
System.out.println(area);
我想,你明白了。 第一步:实例化类并通过构造函数将所有细节封装到其中; 第二步:你可以使用你的类(类的方法),从不了解实现细节。
在您的示例中,调用不带参数new Circle()
的构造函数而不是new Circle(5)
- 这是印刷错误。
答案 2 :(得分:0)
首先让我解释一下Java中的构造函数。 java中有两种类型的构造函数:1。显式和2.隐式。 显式表示带有参数并由开发人员开发的构造函数。 隐式均值,默认或非参数构造函数。 在你的情况下让我分析一下操作: System.out.println(" Area is" + new Circle(5).getArea()); new Circle(5)实际上意味着使用输入参数5调用n显式构造函数。 根据您的共享知识,可以理解在此显式构造函数中设置了半径。 我的意思是,应该存在以下构造函数:
public Circle(int i) {
radius = i;
}