gpt4 book ai didi

java - 无法从二级类访问公共(public)非静态类属性

转载 作者:行者123 更新时间:2023-11-29 10:18:52 26 4
gpt4 key购买 nike

我有以下两个类:

public class Class1
{
public Class1 randomvariable; // Variable declared

public static void main(String[] args)
{
randomvariable = new Class1(); // Variable initialized
}
}

public class Class2
{
public static void ranMethod()
{
randomvariable.getSomething(); // I can't access the member "randomvariable" here even though it's public and it's in the same project?
}
}

我很确定这是我在这里遗漏的一个非常基本的东西,但我实际上遗漏了什么? Class1 成员“randomvariable”是公共(public)的,类也是公共(public)的,并且两个类都在同一个项目中。我该怎么做才能解决这个问题?

最佳答案

有两个问题:

首先,您试图从 main 中为 randomvariable 赋值,但没有 Class1 的实例。这在实例方法中是可以的,因为 randomvariable 将隐式为 this.randomvariable - 但这是一个静态方法。

其次,您尝试从 Class2.ranMethod 中读取值,同样没有涉及 Class1 的实例。

了解什么是实例变量很重要。它是与类的特定实例关联的值。因此,如果您有一个名为 Person 的类,您可能有一个名为 name 的变量。现在在 Class2.ranMethod 中,您实际上是这样写的:

name.getSomething();

这毫无意义 - 首先,这段代码与 Person 根本没有任何关联,其次,它没有说明哪个涉及的人。

同样在 main 方法中 - 没有实例,所以您没有上下文。

这是一个可以工作的替代程序,因此您可以看到其中的区别:

public class Person {
// In real code you should almost *never* have public variables
// like this. It would normally be private, and you'd expose
// a public getName() method. It might be final, too, with the value
// assigned in the constructor.
public String name;

public static void main(String[] args) {
Person x = new Person();
x.name = "Fred";
PersonPresenter.displayPerson(x);
}
}

class PersonPresenter {

// In a real system this would probably be an instance method
public static void displayPerson(Person person) {
System.out.println("I present to you: " + person.name);
}
}

正如您从评论中看出的那样,这仍然不是理想的代码 - 但我希望与您的原始代码保持相当接近。

但是,这现在可以工作了:main 正在尝试为特定实例设置实例变量的值,同样,presentPerson 是给定一个实例的引用作为参数,因此它可以找出该实例的 name 变量的值

关于java - 无法从二级类访问公共(public)非静态类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com