0

我想知道是否可以在另一个 java 类中使用一个 java 类的变量。假设变量 Time 在 A 类中定义和计算,我如何在 B 类中使用它?

4

5 回答 5

7

其他答案建议增加变量的可见性。要这样做。它打破了封装:您的类使用字段来存储特定信息的事实是实现细节;您应该改为通过类的 API(其方法)公开相关信息。在几乎所有情况下,您都应该将字段设为私有。

同样,其他一些答案建议可能将变量设为静态。不要随意这样做。您需要了解静态的真正含义:它表示这条信息与类型相关,而不是与该类型的任何一个特定实例相关。有时这是合适的,但它通常是通往不易测试代码的道路——而且在许多情况下,这显然是错误的。例如,一个Person类可能有一个name变量,但它当然不应该是静态的——它显然是关于一个人的信息

无论如何,在公开信息之前,您应该仔细考虑 - 考虑是否存在相关类可以公开的更广泛的操作,而不是仅仅零碎地泄露其数据 - 但是当您确实想要公开字段的值时,请使用属性。例如:

public class Person {
    private final String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

通过通过方法公开它,您可以在不破坏现有客户端的情况下更改实现细节。

然后从另一个类中,您只需调用该getName()方法:

// However you end up getting a reference to an instance of Person
Person person = ...;
String name = person.getName();

如果您确实有一个静态字段,则可以以相同的方式公开该值,但使用静态方法,您可以使用类名调用该方法。

小心返回可变的值,例如java.util.Date. 这是使用 getter 方法而不是允许直接访问该字段的另一个原因 - 您可以使该方法在您需要的地方返回一个防御性副本。

于 2013-02-07T06:53:34.070 回答
1

在此处输入图像描述

另请阅读Java 中的访问说明符,它可能会有所帮助。

于 2013-02-07T06:49:33.683 回答
1

如果它被声明为 public,你可以使用ClassA.yourVariable. 另一方面,对于私有访问修饰符,将 getter 包含到您的ClassA. 上ClassB,打电话ClassA.getYourVariable()

于 2013-02-07T06:47:16.667 回答
0

如果您将变量声明为 public 或 static,您将能够从另一个类访问它。

这是一个非常非常糟糕的主意:)

于 2013-02-07T06:46:32.843 回答
0

如果变量是static,您可以A.Time从任何可以访问该变量的代码中引用它。所有类 A只有一个Time值。如果它是一个实例变量,并且您有一个aclass的实例A,则可以将该变量称为a.Time。class 的每个实例都有一个单独的值A

这取决于 Java 的访问规则:

  • 如果字段是public,任何代码都可以访问它(这使得public变量有点危险,除非它们也被声明final
  • 如果该字段是protected,则只有同一包或子类中的代码A才能访问它
  • 如果该字段具有默认访问权限,则只有与 A 类位于同一包中的代码才能访问它
  • 如果该字段是private,则只有类中的代码A(包括 的内部类A)可以访问它。

或者,您可以在 A 类中提供访问器方法

public class A {
    . . .
    public class getTime() {
        return this.Time; // the "this." is optional
    }
}
于 2013-02-07T06:48:08.253 回答