2013-04-09 63 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; 
    } 
} 
相關問題