Java OOP-通过引用变量和实例类访问对象
我在学习类和对象,学习参考变量,访问对象的数据和方法。在我的教科书中,我们创建了一个程序,计算给定半径的圆的面积 它们在此处声明对象引用变量、创建对象并将引用指定给变量:Java OOP-通过引用变量和实例类访问对象,java,class,oop,object,Java,Class,Oop,Object,我在学习类和对象,学习参考变量,访问对象的数据和方法。在我的教科书中,我们创建了一个程序,计算给定半径的圆的面积 它们在此处声明对象引用变量、创建对象并将引用指定给变量: Circle myCircle = new Circle(); 他们随后给出了下面一个查找区域的示例(getArea()*只返回给定半径的区域): 5(括号中的数字)是半径的输入吗 如果是,为什么不在getArea()括号中 另外,Circle()没有参数,所以()中怎么会有数字呢 *getArea()的代码: 顺便问一下,
Circle myCircle = new Circle();
他们随后给出了下面一个查找区域的示例(getArea()
*只返回给定半径的区域):
5
(括号中的数字)是半径的输入吗李>
getArea()
括号中李>
Circle()
没有参数,所以()中怎么会有数字呢李>
*getArea()
的代码:
double getArea()
{
return radius * radius * Math.PI;
}
传递给
圆
构造函数的参数很可能会给半径
字段赋值。如果是,为什么不在getArea()括号中
getArea()
是Circle的一个实例方法。它依赖于已具有半径信息的圆实例的状态。因此,将radius参数传递给
getArea()
没有意义。如果您在
Circle
类中有一个实用静态方法,可以根据半径计算面积。例如:
public static double computeArea(double circleRadius){
...
}
您可以通过以下方式调用它:
double area = Cicle.getArea(5.5);
此外,Circle()没有参数,所以如何才能得到一个数字
还是在()里
如果没有接受半径信息的圆
构造函数,则调用新圆(5)
无法编译。所以它当然需要一个。您应该定义一个
圆
构造函数,例如:
public class Circle{
...
private double radius;
public Circle(double radius){
this.radius = radius;
}
}
顺便问一下,如果只有一个括号,你能把它去掉吗
里面的声明
double getArea()
{
return radius * radius * Math.PI;
}
括号()
是指用于声明方法和构造函数的Java语言规范。声明方法时,无论如何都需要它。
我将尝试深入解释:
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)
——这是印刷错误。首先让我解释一下Java中的构造函数。
java中有两种类型的构造函数:1。显式和2。含蓄的
显式是指由开发人员开发的带参数的构造函数。
隐式方法,默认或非参数构造函数。
就您的情况而言,让我分析一下操作:
System.out.println(“面积为”+新圆圈(5.getArea());
新的圆圈(5),实际上意味着调用带有输入参数5的n显式构造函数。
根据您共享的知识,可以理解在这个显式构造函数中设置了半径。
我的意思是,应该存在以下构造函数:
public Circle(int i) {
radius = i;
}
嗯,这需要几个月的时间,所以坐好。请看链接,看看你可以在StackOverflow上问什么样的问题。我编辑它是为了让问题不那么笼统——如果这就是你所说的“花几个月”的意思的话。阅读链接,我不是为了好玩才放进去的。我读了链接。对于在这里呆了5天的人来说,这不是你的立场,而是傲慢。遵循指导原则。这里有很多人,如果我们为求职面试等做家庭作业或考试,他们会很感激的,但这不是(或世界)的运作方式。谢谢,但我有一个关于第三个问题答案的问题-从我的第一段源代码来看,它表明
圆圈
没有争论,那么这有什么意义呢?它应该编译,它是我教科书中源代码的一部分。new Circle(5)
如果Circle
类中没有匹配的构造函数,比如Circle(double d)
,它将永远不会编译。试一下,你可以检查一下。引用教科书:“例如,new Circle()使用Circle类中定义的第一个构造函数创建Circle类的对象,new Circle(25)使用Circle类中定义的第二个构造函数创建对象。一个类通常提供一个没有参数的构造函数(例如Circle())。这样的构造函数被称为无参数或无参数构造函数。“对不起,这太笼统了,但这和你想说的相符吗?嗯。假设Circle
是一个声明radius
字段的类new Circle()
是对无参数构造函数的调用:public Circle(){…}
它假定radius
使用默认值进行值化,而new Circle(5)
是对声明一个参数的构造函数的调用,例如:public Circle(double radius){…}
,它将radius
参数存储在radius
字段中,并尝试摆脱公共静态双计算区域(双循环){…}double area=Cicle.getArea(5.5)代码>因为静态对象与干净的OOP无关
public Circle(int i) {
radius = i;
}