从Class2调用Class1的getter

时间:2013-04-09 09:15:56

标签: java call getter

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

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

P.S。如果我将函数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(); // !!!
    }
} 

5 个答案:

答案 0 :(得分:1)

  • 要调用Class1 的方法而不使用静态,您需要该类的实例。
  

如果我将函数getVar1作为静态函数,编译器就会这样说   返回this.var1不正确。

正确,因为var1 不是静态的。你会得到如下错误:

  

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

应该给你提示。

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

}

答案 1 :(得分:1)

首先public Class2应为public class Class2

其次,如果您将getVar1更改为静态,则还必须将var1更改为静态(原因是您无法从静态函数直接访问非静态成员)

否则创建Class1的实例并在该实例上调用getVar1()

答案 2 :(得分:0)

new Class1().getVar1();

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

答案 3 :(得分: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(); // !!!
    }
}

答案 4 :(得分:-1)

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

int var = new Class1.getVar();

或将class1getVar1var1设为静态

public static class1 {
    private static int var1;

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

    public static int getVar1() {
        return var1;
    }
}