【问题标题】:variable visibility from calling function [duplicate]调用函数的可变可见性[重复]
【发布时间】:2020-09-18 03:16:55
【问题描述】:

我有 2 节课。在一类中,我有 4 个变量。我实例化另一个类并使用使用这些变量的方法。我不想将它们作为参数传递。他们设置为公开。这两个类都在默认包中。这是我的代码:

public class c1 {
     public int x, y, x1, y1;
     public static void main(String args[]) {
          c1 a = new c1();
     }
     public c1() {
          c2 b = new c2();
          b.getSlope();
     }
}

public class c2 {
     public c2() {}
     public int getSlope() {
          return (y-y1)/(x-x1);
     }
}

我收到一条错误消息:找不到符号

【问题讨论】:

    标签: java visibility access-specifier


    【解决方案1】:

    您实例化(一个类的)对象。您的“变量”是该类的字段。如果字段不是静态的(如您的代码中),它们属于对象,您必须将相应的对象传递给其他类的方法才能访问字段。

    应该是这样的

    b.getSlope(a)
    

    当调用方法和实现时必须有那个参数

     public int getSlope(c1 c) {
          return (c.y-c.y1)/(c.x-c.x1);
     }
    

    如果你想让字段属于类,它们必须是静态的。

    (请注意,在 Java 中 - 按照惯例 - 类名应以大写字母开头)。

    【讨论】:

    • 除了你不是说 public int getSlope(c1 c) ... 因为它是 c1 有变量吗?然后,在 c1 的构造函数中,调用可能看起来像这样 b.getSlope(this)。除了没有设置任何值,因此变量都将为零。但是他们需要传递一个 c1 的实例......而不是 c2,对吧?除此之外,是的,你有答案。
    • Instantiate 的意思是“创建一个实例”。所以你要实例化类
    【解决方案2】:

    变量 x、y、x1、y1 在您的 c2 类中不存在,因此您的代码将永远无法编译。

    如果您想在 c2 类中使用 x、y、x1 和 y1,请考虑尝试另一种方法。

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2018-10-24
      • 2016-02-11
      • 2018-11-14
      • 2010-11-30
      相关资源
      最近更新 更多