-4

我有一个关于面向对象编程的非常基本的问题。

有两个类 - Class1 和 Class2。我需要从 Class2 调用 Class1 的 getter(请参阅代码)。问题是无法编译下面显示的代码。如何更改此代码以能够从 Class2 调用 Class1 的 getter。那么,解决这个问题的正确方法是什么?

PS如果我将函数getVar1设为静态,编译器会说这return this.var1是不正确的。

public class Class1 
{
    private int var1;

    public Class1(int index1, int index2) 
    {
      //...
      Class2 c2 = new Class2();
      //..
    }

    public int getVar1()
    {
      return this.var1;
    }
}


import Class1;

public Class2
{
    public Class2() 
    {
      //...
      int var = Class1.getVar1(); // !!!
    }
} 
4

5 回答 5

1
  • 要调用Class1 没有静态的方法,您需要该类的实例。

如果我将函数 getVar1 设为静态,编译器会说 return this.var1 不正确。

没错,因为var1不是静态的。您会收到如下错误:

无法在静态上下文中访问非静态方法

这应该给你提示。

class Class2{
   //pass the instance of Class1 to Class2
   public Class2(Class1 class1){
      class1.getVar1(); //invoke method here
   }

}
于 2013-04-09T09:18:52.153 回答
1

首先public Class2应该是public class Class2

其次,如果您更改getVar1为静态,您也必须更改var1为静态(原因是您不能直接从静态函数访问非静态成员)

否则创建一个实例Class1并调用getVar1()该实例

于 2013-04-09T09:19:37.663 回答
0
new Class1().getVar1();

您没有创建实例。在使用实例变量或方法之前创建实例。

于 2013-04-09T09:17:54.943 回答
0

我不明白你在找什么。但暂时我做出了改变。

public class Class1 {
    private int var1;

    public Class1() {
    }

    public Class1(int index1, int index2) {
        // ...
        Class2 c2 = new Class2();
        // ..
    }

    public int getVar1() {
        return this.var1;
    }
}

import Class1;
public class Class2 {
    public Class2() {
        // ...
        int var = new Class1().getVar1(); // !!!
    }
}
于 2013-04-09T09:24:41.993 回答
-1

Class1不是static,因此您只能通过为其创建实例来访问其变量和函数。

int var = new Class1.getVar();

或makeclass1和as staticgetVar1var1

public static class1 {
    private static int var1;

    public Class1(int index1, int index2)  {
        //...
        Class2 c2 = new Class2();
        //..
    }

    public static int getVar1() {
        return var1;
    }
}
于 2013-04-09T09:25:24.543 回答