现在越来越多的人开始学习java很多人求学心切免不了贪多而忽略了一些基本的也是必须搞清楚的概念下面我就来说说java里类的构造器概念大家知道java作为一门OO语言和C++Smalltalk等一样有个最关键
ADT
继承
多态
当然对于java类的概念是重中之重对于类的构造和对象的实现就需要用到构造器
例如class Professer(){
private string name;
private int number;
public Professer(string nint no){
name=n;
number=no;
}
public teach(){}
}
下面我们要对这个类的对象实例化Professer p =new Professer()
以上就是构造器的语法了这里用到了关键字
new
讲到这里还没有什么可以困扰我们的地方那么下面我们将借助有关继承的一些例子来继续阐述构造器问题
假设class OldProfesser(){
private string name;
private int number ;
private int age;
public do(){}
}
有人也许会问为什么这个OldProfesser类里面为什么没有定义构造器?其实java已经我们定义了一个无参数的默认构造器即OldProfesser(){}
Ok 到这里为止没有任何问题然而一旦让OldProfesser继承Professer并实例化编译器就会报错LOOK
class OldProfesser extends Professer(){
private string name;
private int number ;
private int age;
public do(){}
public static void mian(string[] args){
OldProfesser o=new OldProfesser();
}
很抱歉你得到的是一条出错的信息有人问了你说OldProfesser的构造器是默认的我才这样写没错OldProfesser确实存在这样一个无参的构造器这样写法换做OldProfesser不做Professer的子类的情况下一定是正确的
你所需要知道的是下面一个规则
如果一个类没有设置字定义构造器那么编译器会默认一个无参构造器
在子类调用构造器时总是先调用基类的构造器
如果自定义了构造器那么默认构造器将不存在
在上例中OldProfesser调用默认构造器前编译器自动调用基类Professer的默认构造器然而Professer有了自定义构造器所以默认构造器不存在了编译器报错…………
那么我们该怎么做呢?像下面这样就OK了
class OldProfesser extends Professer(){
private string name;
private int number;
private int age;
Oldprofesser(string nint noint age){
super(nno);
thisage=age;
}
public do(){}
}
这就是在子类中显式的调用基类构造器注意super必须是{}中的第一个执行语句其实我们还有另外一种方法在Professer类里面补充一个消失掉的默认构造器如下
class Professer(){
private string name;
private int number;
public Professer(string nint no){
name=n;
number=no;
}
Professe(){}
public teach(){}
}
值得一提的是构造器方法中构造器的名称要与类的名称完全相同包括大小写
好了关于构造器的一些基本问题讲的差不多了请多指正…………