class Tree{
int height;
Tree(){
System.out.println("Planting a seeding");
height = 0;
}
Tree(int i){
System.out.println("Creating new Tree that is  "+i+" feet tall");
height = i;
}
void info(){
System.out.println("Tree is "+height+" feet tall");
}
void info(String s){
System.out.println(s+": Tree is  "+height +"  feet tall");
}
}
public class Overloading{
//new Tree();
public static void main(String[] args){
for(int i=0;i<5;i++){
Tree t= new Tree(i);
t.info();
t.info("Overloaded method");
//new Tree();
}
new Tree();
}
}
为什么把new Tree()放在main方法之外就会出错,而放在它里面就可以.
错误显示:Overloading.java:20: 非法的类型开始
        new Tree();
        ^
Overloading.java:20: 需要 <标识符>
        new Tree();

解决方案 »

  1.   

    将Tree类中构造函数申明为public 试试;
    public Tree()
    {
    ......
    }public Tree(String s)
    {
    ....
    }
      

  2.   

    ?什么意思? 我可以在类中创建实例对象呀?不一定需要放在类方法中吧?
    我把这个Tree b = new Tree();加到上面就可以通过!
      

  3.   

    可是改成public 还是同样的错误!
      

  4.   

    在你的程序段中构建的是匿名类,没有变量引用
    class NameofClass
    {
    constructor
    ...
    method
    ...
    field
    ...
    }
    Tree b = new Tree();
    后面声明了一个 Tree类的变量,并引用了个该类,这样子当然可以
      

  5.   

    放在main方法之外:
    static { new Tree();}class Overloading{
    static { new Tree();}
    public static void main(String[] args){
    for(int i=0;i<5;i++){
    Tree t= new Tree(i);
    t.info();
    t.info("Overloaded method");
    //new Tree();
    }
    new Tree();
    }子类的public 要去掉。