Java构造器的使用

来源:互联网 发布:简述网络教学设计原则 编辑:程序博客网 时间:2024/06/05 05:06

Java构造器与c++构造函数非常的类似,相同点如下:

1、构造函数的名称均与类名相同。

2、均没有函数类型,因此也没有返回值。

3、都是在new时隐式的调用(实例化一个类时)。

4、都不可以在除构造器之外的函数中显示调用(???)。

5、构造函数都不可以被private关键字修饰。

6、一个类可以有一个以上构造函数,若没有,编译器默认有一个不带参数的空构造函数。.

7、一旦显式的写出了构造函数,无论显式写出的函数是否有参数,编译器将不在默认有一个不带参数的空构造函数。(即不写时,默认有一个不带参数的构造函数,一旦写了,即使是写了一个带参数的构造函数,原来默认的不带参数的也不再存在了,除非自己手写)。


Java中构造器的独有特点(相比c++):

1、Java的构造函数可以是默认类型,或者申明为public。

2、构造器中可以显式的调用该类或者父类的构造函数,this()代表本类构造器,super()代表父类构造器,要调用带参数的构造器时,括号中写参数。(注意:显示调用构造器必须写在构造器内容的第一行,且只能调用一个,如果不写,默认调用父类不带参数的构造器。)(问:不妥吧?如果我在构造器中写了this(),那么在构造子类时不就不能调用父类的构造函数了,有些继承的变量将不能初始化。答:如果调用了this(),this()中也会有对父类构造器的调用,所以还是可以利用到父类构造器的,不过确实也有限制,即只能调用和this()相同的父类构造器。)这也能从侧面反映Java的执行顺序,实例化类时直接调用本类的构造器,只不过在构造器的第一行会显式或者隐式的出现父类构造器,但是在实例化时不会先跑到父类中执行构造器,而后再执行子类的构造器。

3、先想到这些。。。以后再补充

public class Main{public static void main(String[] ges){System.out.println("first:");Teacher t = new Teacher(3);System.out.println("second:");t.name = "小布";t.age = 70;t.school = "清华大学";t.subject = "Java";t.seniority = 12;t.say();return ;}}class People{People(int a){System.out.println("父类带参数的构造函数,参数为: "+a);}People(){System.out.println("父类不带参数构造函数");}public String name = "hehe";int age;int height;void say(){System.out.println("我的名字是"+name);}}class Teacher extends People{String school;String subject;int seniority;Teacher(){System.out.println("子类无参数构造函数");}Teacher(int k){this();System.out.println("子类含参构造函数,参数为:"+k);}void say(){System.out.println("我是叫"+name+"的老师");}}


1 0
原创粉丝点击