java构造方法的相关内容

来源:互联网 发布:怎样提升淘宝店信誉 编辑:程序博客网 时间:2024/05/16 13:48

一 java 类当中都有构造方法,如果你没有指定构造方法,则系统会调用缺省的构造方法。

二 构造方法的作用:检查对象是否被正确的构造。

三 在继承关系中,构造函数的相关内容

      基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个基类的构造器都能得到调用。这样做是很有意义的,因为构造器的一个任务就是,检查对象是否被正确的构造。导出类只能访问它自己的成员,不能访问基类中的成员(基类成员通常是private类型的)。只有基类的构造器才具有恰当的只是和权限来对自己的元素进行初始化。因此必须所有的构造函数都得到调用,否则不能构建完整的对象。

     这正是编译器为什么要强制每个导出类都必须调用构造器的原因。在导出类的构造器主体中,如果没有明确指定调用某个类构造器,它就会默默的调用缺省构造器。不过不存在缺省构造器,编译器就会报错。

     以上我们可以看一个例子:

class base
{
    
private int i;
    
public base(int i)
    
{
        
this.i = i;
        System.out.println(
"In base : " + i);
    }
        
}


public class test extends base
{
    
private int j;
    
public static void main(String args[])
    
{
        test t 
= new test();
    }

}

 该程序编译情况:

D:/temp>javac test.java
test.java:11: 找不到符号
符号: 构造函数 base()
位置: 类 base
public class test extends base
       ^
1 错误

我们可以推理程序的构造过程,当主方法执行时,test t = new test(), 应该调用 test类的构造函数,而test类继承于base类,所以应该调用base类的缺省构造方法。我们可以看到base类缺省构造方法被重载了,所以test类调用不到base类的缺省构造方法。

修改如下:

class base
{
    
private int i;
    
    
private base()
    
{
        System.out.println(
"In private base");
    }

    
public base(int i)
    
{
        
this.i = i;
        System.out.println(
"In base : " + i);
    }
        
}


public class test extends base
{
    
private int j;
    
public static void main(String args[])
    
{
        test t 
= new test();
    }

}
;

修改的程序当中,我们增加了缺省的构造方法,但是我们把它的访问权限设置为private ,那么它的继承类在构造过程当中,调用不到它,所以编译错误。

编译情况如下 :

D:/temp>javac test.java
test.java:16: 找不到符号
符号: 构造函数 base()
位置: 类 base
public class test extends base
       ^
1 错误

四  我们可以总结一下构造器的调用顺序:

     1,调用基类构造器,这个步骤会不断的反复递归下去。

    2 ,按声明顺序调用成员的初始化方法。

    3 调用导出类的构造器主体。

原创粉丝点击