2013-04-09 60 views
-4

我有一个关于面向对象编程的基本问题。从Class2调用Class1的获取者

有两个类 - 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(); // !!! 
    } 
} 
+1

如果你让功能getVar1静态的,你也需要做出VAR1静态的。由于您无法从静态上下文访问非静态变量。 – Ankit 2013-04-09 09:20:17

回答

1

所有public Class2首先应该是public class Class2

其次,如果你改变getVar1到静态,你还必须更改var1静态(原因是,你不能直接从静态访问非静态成员功能)

否则创建Class1一个实例,并且该实例

0
new Class1().getVar1(); 

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

1
  • 调用Class1方法不带静电你需要一个类的实例。

如果我做的函数getVar1为静态,编译器说, 回报this.var1是不正确的。

正确因为var1非静态。你会得到错误,如:

在静态情况下

这应该给你的提示不能访问非静态方法。

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

} 
0

我没叫getVar1()了解你在找什么。但暂时我做了改变。

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(); // !!! 
    } 
} 
-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; 
    } 
} 
相关问题