最近在看thinking in java 看到constructor overloading的地方有些迷糊了,类可以嵌套,可以重载,但是对于嵌套类和重载的理解有偏差,书上有段代码://: initialization/NoSynthesis.java
class Bird2 {
      Bird2(int i) {}
      Bird2(double d) {}
}
public class NoSynthesis {
  public static void main(String[] args) {
       //! Bird2 b = new Bird2(); // No default
           Bird2 b2 = new Bird2(1);
           Bird2 b3 = new Bird2(1.0);
}
} ///:~1.请问Bird2(int i) {}和Bird2(double d) {}是内嵌类还是方法?
2.如果是类的话带参的构造如何理解?(我试着在Bird2(int i) {}里加方法出现异常,所以觉得应该是类)
3.class Bird2 {
      Bird2(int i) {}
      Bird2(double d) {}
}改写为
class Bird2 {
      class innerClass{
          void print(){
              System.out.println("Nested-inner Class");
          }
      }
      Bird2(int i) {}
      Bird2(double d) {}
}
public class NoSynthesis {
  public static void main(String[] args) {
           Bird2 b2 = new Bird2(1);
           Bird2 b3 = new Bird2(1.0);
           
}
} ///:~
如何创建innerClass的实例?设想下我们现在要构建一头双头龙,我们创建1号龙,然后为它的2个头 的 innerClass实例化?
innerClass head1=new innerClass();
innerClass head2=new innerClass();
 这样写还是异常...4.如把innerClass改为静态类以及内部方法改为静态方法是不是在构建innerClass的时候就已经初始化并分配空间了,可以直接调用?Bird2.innerClass.print();无需实例化就可以直接执行?
非常感谢大家的帮助!

解决方案 »

  1.   

    Bird2(int i) {} Bird2(double d) {} 是Bird2类的两个构造方法,重载了
      

  2.   

          Bird2(int i) {} 
          Bird2(double d) {} 
    是构造函数,主要用于新建对象时传入初始化参数,写两个使用了方法重载,这样既可以用int值初始化又可以用double值初始化。
      

  3.   

    如何创建innerClass的实例?
    Bird2 out=new Bird2()
    Bird2.innerClass inner =out.new innerClass();
      

  4.   

    谢谢大家,现在对java语言结构又有更多的认识了!