最近在看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();无需实例化就可以直接执行?
非常感谢大家的帮助!
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();无需实例化就可以直接执行?
非常感谢大家的帮助!
Bird2(double d) {}
是构造函数,主要用于新建对象时传入初始化参数,写两个使用了方法重载,这样既可以用int值初始化又可以用double值初始化。
Bird2 out=new Bird2()
Bird2.innerClass inner =out.new innerClass();