我想知道是否可以在另一个java类中使用java类的变量。假定变量Time在A类中定义和计算,我如何在B类中使用它?
答案 0 :(得分: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方法而不是允许直接访问该字段的另一个原因 - 您可以使该方法返回您需要的防御副本。
答案 1 :(得分:1)
如果声明为公开,则可以使用ClassA.yourVariable
。另一方面,对于私人访问修饰符,请将getter包含到ClassA
。在ClassB
上,拨打ClassA.getYourVariable()
。
答案 2 :(得分:1)
另请阅读access specifiers in Java它可能会有所帮助。
答案 3 :(得分:0)
如果您将变量声明为public或static,则可以从另一个类中访问它。
这是一个非常糟糕的想法:)
答案 4 :(得分:0)
如果变量为static
,您可以从任何有权访问该变量的代码中将其称为A.Time
。对于所有类A,只有一个Time
值。如果它是一个实例变量,并且您有类a
的实例A
,则可以将该变量称为{{1 }}。类a.Time
的每个实例都有一个单独的值。
这取决于Java的访问规则:
A
,则任何代码都可以访问它(这会使public
个变量变得危险,除非它们也被声明为public
)final
,则只有同一个包中或protected
的子类中的代码才能访问该字段A
,则只有类private
中的代码(包括A
的内部类)才能访问该字段。或者,您可以在A类中提供访问者方法:
A