【问题标题】:Call a getter of Class1 from Class2从 Class2 调用 Class1 的 getter
【发布时间】:2013-04-09 09:15:55
【问题描述】:

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

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

附:如果我将函数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(); // !!!
    }
} 

【问题讨论】:

  • 如果您将函数 getVar1 设为静态,您还需要将 var1 设为静态。由于您无法从静态上下文访问非静态变量。

标签: java call getter


【解决方案1】:

首先public Class2应该是public class Class2

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

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

【讨论】:

    【解决方案2】:
    • 要调用Class1 没有静态的方法,您需要该类的实例。

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

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

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

    这应该会给你提示。

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

    【讨论】:

      【解决方案3】:
      new Class1().getVar1();
      

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

      【讨论】:

        【解决方案4】:

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

        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(); // !!!
            }
        }
        

        【讨论】:

          【解决方案5】:

          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;
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-01-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多