网上版本很多 有的说能调用,有的说不能调用,请求专业回答谢谢!

解决方案 »

  1.   

    可以super(参数)
      

  2.   

    new的时候先判断父类的构造方法,如果子类有重写,子类采用自己的构造方法
      

  3.   

    不是能不能的问题,是一定会调用。至于调用哪个构造方法,是根据子类构造方法的参数来决定的,通过super指定调用父类的哪个构造方法,如果没有指定,实例化对象的时候,会自动调用父类无参的构造方法。所以,在定义一个类时,如果没有特殊需求,尽量在类中定义要给无参的构造方法,避免继承时出现错误。
      

  4.   

    如果父类中构造被重写,这个不叫不调用,叫做调用后——被重写,体现为子类的构造。
    如果没有被重写,就会直接调用父类的构造方法,默认super的
      

  5.   

    不但能调用,而且必须调用,而且必须是子类构造器中的第一行语言
    如果子类构造器没有显式调用,则编译器帮你调用不信的话,做个测试:
    定义一个父类,这个类有带参数的构造器
    为这个父类定义一个子类,在子类构造器中不显式调用父类构造器你看能不能编译通过
    实现上:子类构造器必须调用父类构造器,并且是子类构造器中的第一条语言
    而这个规则在C#里有更好的语法保证,C#里调用父类构造器的写法是:
    public SubClass() : base(argument list) {
    ......
    }
      

  6.   

    可以的啊  子类构造方法中第一行默认有一条super( )语句  默认调用的是父类中无参的构造方法  如果父类中是有参的构造方法  那super( )括号里就应该要有对应的参数
      

  7.   

    你将以下代码运行看一下,可以发现在子类中会隐式的调用父类的无参构造器class A{
    public A(){
    System.out.println("A构造")
    }
    } class B extends A{
    public B(){
    //super();//这里会有一个隐式的调用
    System.out.println("B构造")
    }
    }class Ma{
    public static void main(String[] args){
    B b =new B();
    }
    }
      

  8.   

    利用java的反射机制可以调用
      

  9.   

    就问楼主一句话,Super关键字是干嘛用的
      

  10.   

    可以调用啊,你可以在子类构造方法中加super(xxxx),里面传参数,就可以调用父类的有参构造,不传就调用无参构造函数。没有super()就默认调用父类无参构造函数
      

  11.   

    基类的构造器一定会在子类的构造成过程中调用的,而且是按照继承层次逐渐向上连接,使得每个基类的构造器都能调用。
    为什么呢?
    这是因为子类不能访问private对象,如果不调用基类的构造方法的话,就没有创建基类,那么基类中的private对象就没有创建,这显然是是不行的。只有基类的构造器才能够完整创造对象
      

  12.   

    子类的构造函数里使用super关键字,可以调用父类构造函数,不过貌似只能写在最前面,否则报错
      

  13.   


    public class Test { //测试类
    public static void main(String[] args) {
                 Son son=new Son();     //子类的构造方法会默认继承父类的构造方法
    }
    }class Father {       //父类
    public Father() {
    System.out.println("我就是父类方法!");
    }
    }class Son extends Father {          //子类继承父类
    public Son() {
    //super();其实系统会在子类构造方法默认调用父类的构造方法
    System.out.println("我是子类方法!");
    }

    public void diaoYongFuMehtod(){
    super();      //报错,这里不能调用父类构造方法,父类构造方法只能被子类构造方法调用,不能被子类的普通方法调用
    /**
     * 解释原因:
     *     假设这个父类构造方法是可以在子类普通方法中被调用的,也就是new Son().diaoYongFuMehtod();这里的意思就是先加载Son类创建好
     *     Son类对象然后调用diaoYongFuMehtod方法,然后diaoYongFuMehtod方法里的super()是加载Father类,总体类加载顺序就是
     *     Son类-->Father类.而其实虚拟机真正的加载方式是先加载Father类,再加载子类的.(用现实生活举例:没有父亲这个人出现哪会有儿子呢,
     *     其实java语言很多都是符合伦理道德的)
     * */
    }
    }
      

  14.   

    你用我的代码跑一下就知道了,希望对你有用,好好加油!public class Test { //测试类
    public static void main(String[] args) {
                 Son son=new Son();     //子类的构造方法会默认继承父类的构造方法
    }
    }class Father {       //父类
    public Father() {
    System.out.println("我就是父类方法!");
    }
    }class Son extends Father {          //子类继承父类
    public Son() {
    //super();其实系统会在子类构造方法默认调用父类的构造方法
    System.out.println("我是子类方法!");
    }

    public void diaoYongFuMehtod(){
    super();      //报错,这里不能调用父类构造方法,父类构造方法只能被子类构造方法调用,不能被子类的普通方法调用
    /**
     * 解释原因:
     *     假设这个父类构造方法是可以在子类普通方法中被调用的,也就是new Son().diaoYongFuMehtod();这里的意思就是先加载Son类创建好
     *     Son类对象然后调用diaoYongFuMehtod方法,然后diaoYongFuMehtod方法里的super()是加载Father类,总体类加载顺序就是
     *     Son类-->Father类.而其实虚拟机真正的加载方式是先加载Father类,再加载子类的.(用现实生活举例:没有父亲这个人出现哪会有儿子呢,
     *     其实java语言很多都是符合伦理道德的)
     * */
    }
    }