1)如果java没有写构造器,编译器会调用默认的构造器。如果写了一个构造器,编译环境便不会调用默认的构造器
2)构造器可以有任何访问的修饰: public, protected, private或者没有修饰(通常被package 和 friendly调用). 不同于方法的是,构造器不能有以下非访问性质的修饰: abstract, final, native, static, 或者 synchronized。
3)构造器没有返回值,也不需要void。
4)This用法,方法中This,指向的是执行方法的类的实例。构造器的this指向同一个类中,不同参数列表的另外一个构造器,需在在第一行。
public class Platypus { String name; Platypus(String input) { name = input; } Platypus() { this("John/Mary Doe"); } |
5)super 在构造器和一般方法中,都用关键字super指向超类,但是用的方法不一样。一般方法用这个关键字去执行被重载的超类中的方法。看下面的例子:
class Mammal { void getBirthInfo() { System.out.println("born alive."); } }
class Platypus extends Mammal { void getBirthInfo() { System.out.println("hatch from eggs"); System.out.print("a mammal normally is "); super.getBirthInfo(); } } |
而在构造器中则表示super去调用超类中的构造器。
public class SuperClassDemo { SuperClassDemo() {} }
class Child extends SuperClassDemo { Child() { super(); } } |
总结:
主题 |
构造器 |
方法 |
功能 |
建立一个类的实例 |
java功能语句 |
修饰 |
不能用bstract, final, native,static, or synchronized |
能 |
返回类型 |
没有返回值,没有void |
有返回值,或者void |
命名 |
和类名相同;通常为名词,大写开头 |
通常代表一个动词的意思,小写开头 |
this |
指向同一个类中另外一个构造器,在第一行 |
指向当前类的一个实例,不能用于静态方法 |
super |
调用父类的构造器,在第一行 |
调用父类中一个重载的方法 |
继承 |
构造器不能被继承 |
方法可以被继承 |
编译器自动加入一个缺省的构造器 |
自动加入(如果没有) |
不支持 |
编译器自动加入一个缺省的调用到超类的构造器 |
自动加入(如果没有) |
不支持 |