• 2008-12-29

    Java中的构造器(构造方法)的调用 - [java基础]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://allantaylor.blogbus.com/logs/33086015.html

    注意:(1)在子类中的缺省构造器可以调用父类的缺省/非缺省构造器,在调用父类的缺省构造器时,
    不用写super关键字直接可以调(因为super是隐式的);在调用父类的非缺省构造器时,
    必须用super(参数)显示调用。如下面的案例所示:

    class Art {
     Art(){System.out.println("Art constructor1");}//(1)
     
     Art(int i ) {
         System.out.println("Art constructor2");
       }
    }

    class Drawing extends Art {
     public Drawing(){super(3);}//(2)
        public Drawing(int i) {
      super(4);
        System.out.println("Drawing constructor");
      }
    }

     

    public class E05_Cartoon2 {
      public static void main(String args[]) {
        new Drawing();//(3)
        //new Drawing(3);
      }
    } ///:~ 

     

    运行结果:

    Art constructor2

    如果把标记为(2)处的super(3)删除掉,那么会调用父类的缺省构造器。

    运行结果是:

    Art constructor1

     

    注意:(2)在子类中的非缺省构造器可以调用父类的缺省/非缺省构造器,在调用父类的缺省构造器
    时,不需要super关键字直接可以调用;在调用父类的非缺省构造器时,必须用super(参数)显示
    调用。看下面的案例

    class Art {
     Art()//(1)
     {
      System.out.println("Art constructor1");
      }
     Art(int i ) {
         System.out.println("Art constructor2");
       }
    }

    class Drawing extends Art {
     //public Drawing(){super(4);}//(2)
        public Drawing(int i) {
       //super(4);//(3)
        System.out.println("Drawing constructor");
      }
    }

     

    public class E05_Cartoon2 {
      public static void main(String args[]) {
        //new Drawing();//(4)
        new Drawing(3);
      }
    } ///:~

     

    运行结果:

    Art constructor1
    Drawing constructor

    如果把标记为(3)的注释去掉,那么此时就是调用父类的非缺省构造器,

    运行结果是:

    Art constructor2
    Drawing constructor


    收藏到:Del.icio.us