java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
下面小编就为大家带来一篇关于 java 中构造函数的一些知识详解小编觉得挺不错的, 现在就分享给大家, 也给大家做个参考一起跟随小编过来看看吧
java 的构造函数是一个非常重要的作用, 首先 java 里的构造函数是可以重载的, 而且因为也是可以继承在父类的构造函数, 所以在子类里, 首先必然是调用父类的构造函数可以看下面的两个例子来对比:
- public class Test
- {
- public static void main(String args[])
- {
- B b = new B(100);
- }
- }
- class A
- {
- public A()
- {
- System.out.println("A without any parameter");
- }
- public A(int i)
- {
- System.out.println("A with a parameter");
- }
- }
- class B extends A
- {
- public B()
- {
- System.out.println("B without any parameter");
- }
- public B(int i)
- {
- System.out.println("B with a parameter");
- }
- }
这个例子最后输出的是
- A without any parameter
- B with a parameter
可以看到首先调用的是父类的构造函数, 然后再是调用自己的构造函数但是因为这里的 B 类中的有参数的构造函数是没有 super 父类, 所以导致它只会执行父类的没有参数的构造函数如果要让它执行有参数的父类的构造函数, 那么就要这样写代码:
- public class Test
- {
- public static void main(String args[])
- {
- B b = new B(100);
- }
- }
- class A
- {
- public A()
- {
- System.out.println("A without any parameter");
- }
- public A(int i)
- {
- System.out.println("A with a parameter");
- }
- }
- class B extends A
- {
- public B()
- {
- System.out.println("B without any parameter");
- }
- public B(int i)
- {
- super(i); // 这里就是继承自父类的有参数的构造函数
- System.out.println("B with a parameter");
- }
- }
所以最后输出的是:
- A with a parameter
- B with a parameter
因此, 派生类必须通过 super 来调用父类的含有参数的构造函数以下再附一道题:
- public class Test extends X
- {
- Y y = new Y();
- Test()
- {
- System.out.print("Z");
- }
- public static void main(String args[])
- {
- new Test();
- }
- }
- class X
- {
- Y b = new Y();
- X()
- {
- System.out.print("X");
- }
- }
- class Y
- {
- Y()
- {
- System.out.print("Y");
- }
- }
输出的结果是什么?
首先我们来分析这道题:
因为首先看这个 main 函数, 这个 main 函数只有一句代码: new Test(); 因为发现这个 Test 类是继承自 X, 所以首先要构造 X, 那么就进行 X 类的运行 Y b = new Y(), 然后我们可以看到输出的 Y, 然后就是执行 X 类的构造函数, 输出 X; 接着就是构造 Y, 然后执行 Test 自己的构造函数, 输出 Z, 所以输出结果是 YXYZ
来源: http://www.phperz.com/article/18/0218/359214.html