一个类当没有“带参数的构造方法”时,“不带参数的构造方法”可有可无(这里假设你的构造方法入abstract method一样什么也不做),但如果有“带参数的构造方法”,那么“不带参数的构造方法”会被自动销毁,需要使用时,要重新定义。例1:
Public class A {
        A(){} /* 可有可无 */
    
        public static void main(String args[]){
             A a=new A(); /* 当构造方法A没有定义时,程序仍可以运行 */
        }
}例2:
Public class A {
     /* A(){} */  /* 不可无 */
 
        A(int i){};        public static void main(String args[]){
             A a=new A(); /* 由于该类有“带参数构造函数,默认构造函数被注销,因此这里会出错,改正是把 A(){}的注释去掉 */        }
}当一个类继承于另一个类,为该类建立一个对象时,编译器会自动为该类的所有父类也建立对象,但这些对象是隐含的,用户并不可见,因此,如果基类(含有子类的类)没有”不带参数的构造函数“而拥有”带参数的构造函数“,那么”不带参数的构造函数“就被销毁,因此该类的子类的构造函数必须为其父类传送一个参数,告诉父类的”带参数构造函数“以在后台建立父类的对象,否则会出错。例1:
Class A {
      A(int i){...} /* 带参构造函数 */
}Class B extends A {
      B(){...}
 
      public static void main(String args[]){
            B b=new B();
      } /*程序出错,因为在为B建立对象时,编译器会自动为其父类A建立隐含对象,由于A的构造函数带参数,那么如果在B中的构造函数并没有告诉A应该传递一个什么参数,编译时就会出错,修改请看例2 */}例2 (仅对例1的Class B 部分进行修改)
Class B extends A {
      B(){
           int i=0;
           super(i);  /* 此行告诉父类A,应该传递一个什么参数给他,这里传0 */
      }      ...
}或者可以对父类A的参数作动态赋值,请看例3例3
Class B extends A {
      B(int i){
           super(i);  /* 此行告诉父类A,应该传递一个什么参数给他,这里传一个动态值,由B对象初始化时决定 */
      }      ...
}