2010-11-28 97 views
0

我在Java新手和即時通訊學習它。Java構造函數新手問題

現在我有兩個班,我已經在類中調用B類的構造方法

class A 
public A { 
init(); 
B bb = new B(textField); 
bb.doSomething(); 
} 

void init() { 
    textField = new JTextField(); 
} 

void fly() { 
//can i just use bb.doFly(); 
} 

private JTextField textField; 
} 

我的問題是,我一定要對每一個功能我想在使用初始化B bb = new B();

問題編輯

+0

你需要顯示B的代碼 - 它有一個方法doFly()嗎?還是它繼承自A? – 2010-11-28 12:11:53

回答

1

它的所有範圍。如果你的屬性是在課堂級別,那麼你不需要每次都創建一個新的。 如果該屬性僅在方法範圍內創建,那麼是的。

不同的是

​​

一流水平範圍

class A { 

    // this is at class level scope. It is define OUTSIDE a method 
    B bb = new B(); 

    public A() { 

    } 
} 
+0

我早些時候做過,但有錯誤「Illegal Forward Reference」 – SOer 2010-11-28 12:16:26

0

沒有,只是參考標識符bb

public class A { 
    private B bb = new B; 

    public A() { 

    } 

    public void foo() { 
     bb.printHello(); // you can only call methods on bb which class B supplies 
     bb.fly();  // won't work; you can only call fly() on objects of type A 
    } 

    public void bar() { 
     bb.printWorld();  
    } 

    public void fly() { 
     System.out.println("I'm flying..."); 
    } 
} 

public class B { 
    public B() { 

    } 

    public printHello() { 
     System.out.println("Hello"); 
    } 

    public printWorld() { 
     System.out.println("Hello"); 
    } 
} 

剛一說明:請聲明你的所有屬性除非你有充分的理由不去。

+0

我已更新我的問題 – SOer 2010-11-28 12:25:04

0

class A
B bb;
public A {
bb = new B();
bb.doSomething();
}

void fly() {
bb.something()
}
}

0

號假設你有這樣的代碼驗證碼:

public class NameOfProgram 
{ 
    public static void main(String[] args) 
    { 
     A aa = new A(); 
     aa.fly(); 
    } 
} 

然後變量BB AA內使用語句new A()創建。所以,你不必創建一個B對象,並將其設置爲bb,因爲它已經存在。另外,你需要在構造函數之外聲明該變量,否則你將無法在其他方法中使用它,例如fly。要糾正它,你可以這樣做:

public class A 
{ 

    B bb; <----------------- 

    public A() 
    { 
     bb = new B(NameOfVariableIForgotAbout); 
    } 

    public void fly() 
    { 
     bb.doFly() //Now this should work 
    } 
} 

你也可以,但該方法後B bb;,我只是喜歡這種方式。

此外,你的A類有一些錯誤(所以你注意將來的參考)。首先,如果你希望能夠從類(A aa = new A(); aa.fly())的實例調用的方法,那麼你需要做的方法public像這樣:

public void fly() 
{ 
    //Insert code here 
} 

而且,你聲明的構造函數錯誤。這裏是你如何做到了:

public A 
{ 
    //Insert code here 
} 

,它是這樣完成的:

public A() 
{ 
    //Insert code here 
} 

的第一個錯誤會導致編譯時錯誤,如果你撥打電話aa.fly(),因爲它既不是民營,也不上市。

即使沒有調用方法,第二個會導致編譯時錯誤。