2010-11-28 99 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(),因为它既不是民营,也不上市。

即使没有调用方法,第二个会导致编译时错误。