日期:2014-05-20  浏览次数:20560 次

java构造器和构造方法 在线等
父类A有一构造方法 A() //无参的方法

子类B继承父类A

现问:1 构造器和 构造方法是一个概念吗
   2 子类构造器一定要调用父类构造方法吗
   3 子类能有自己的构造器吗 //无参的

thanks

------解决方案--------------------
1.构造器和构造方法完全一样,只是不同称呼而已。

2.执行子类构造器之前一定会调用父类构造器。
如果你要调用父类有参数的构造器,就必须在子类构造器的第一行写上super(),括号里面要写上对应类型的参数,如果调用父类无参构造器,就不用写super(),也可以写,都不影响。

3.子类可以有无参构造器,子类也是一个单独的类,想有什么构造器就有什么构造器。
------解决方案--------------------
1.构造方法和构造器是同一概念。构造器结构上就是方法,只是少了还回类型罢了。
2.不要,子类构造器可以调用父类方法,用super()调用父类方法,放在构造方法的第一句。
3.子类可以无构造器,默认是调用父类的无参数构造方法。也可以有自己的构造方法,有参数无参数都可以。


------解决方案--------------------
楼主;;


构造器就是构造方法,,两者是同一概念;

子类构造器默认会调用父类中无参的构造器;

子类可以有无参的构造器,实例化对象时,先默认调用父类中无参构造器;
------解决方案--------------------
4 如果父类也是无参的构造器,子类也是无参的构造器,你刚说
   执行子类构造器之前一定会调用父类构造器,那如果此子类想要调用自己的构造器,那不是也会先调用父类的构造先?

是会先调用父类的构造器的,主要是为父类中定义的属性分配内存
------解决方案--------------------
Java code

public class Test{
    public static void main(String args[]){
        System.out.println(new C());
    }
}
class A{
    public A(){
        System.out.println("AAAAA!");
    }
}
class B extends A{
//    public B(){//这种情况下编译是不通过的,存在自己的构造方法,系统不会为你产生一个默认的无参//数构造器的。所以c就没能调用B的无参数构造器。因为B木有。
//        System.out.println("BBBBB!");
//    }
    public B(String a){
        System.out.println("BBBBBBBBBBBBBBB!");
    }
}
class C extends B{
    
}

------解决方案--------------------
探讨

多谢楼上的,
再问:4 如果父类也是无参的构造器,子类也是无参的构造器,你刚说
执行子类构造器之前一定会调用父类构造器,那如果此子类想要调用自己的构造器,那不是也会先调用父类的构造先?