OOP - 通过具有实例类的引用变量访问对象

时间:2017-08-17 19:01:05

标签: java class oop object

我正在学习类和对象,我正在使用引用变量,并访问对象的数据和方法。在我的教科书中,我们创建了一个程序,在给定半径的情况下计算圆的面积。

它们声明对象引用变量,创建一个对象,并在此处为变量分配引用:

Circle myCircle = new Circle();

他们后面给出了一个寻找区域的例子(getArea() *只返回给定半径的区域):

System.out.println("Area is " + new Circle(5).getArea());
  1. 5(括号中的数字)是半径的输入吗?
  2. 如果是这样,为什么不在getArea()括号中呢?
  3. 另外,Circle()没有参数,那么你怎么能在()中有一个数字呢?
  4. * getArea()的代码:

    1. 顺便说一下,如果里面只有一个陈述,你能摆脱括号吗?

      double getArea() 
      {
          return radius * radius * Math.PI;
      }
      
    2. 请原谅可怕的格式 - 我无法使用Ctrl-K,有人可以为我编辑它。

3 个答案:

答案 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;
    }