标签:java构造函数链 java继承的使用 java中this和super的用法 java继承的结果输出顺序
Java的构造函数链,首先对类的构造函数明确几点:
1.类的构造函数可以重载
2.类的构造函数访问修饰符不一定是public,也可以为private等其他访问修饰符
3.类的构造函数无返回值
4.类的构造函数名与类名保持一致
以下是具体的实例:
类:Person类
类:Employee类(继承Person类)
类:Manager类(继承Employee类)
首先是Person类:
package JavaConstructorFunChain; public class Person { private String pname; //建立空参构造函数 public Person() { System.out.println("创建人类"); } public Person(String pname) { //super(); this.pname = pname; System.out.println(getPname()); } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } }
其次是Employee类:
package JavaConstructorFunChain; public class Employee extends Person { private double salary; public Employee() { //隐式调用父类空参构造函数 //注意"隐式","空参"这两个关键字 System.out.println("创建员工"); } public Employee(String pname,double s) { //this()和super()不能同时存在,因为都要在第一行 //带不带参数视具体情况而定 //this()自己调用自己的构造函数 //就这种情况,有pname这个参数,如果不用super(),则会隐式调用父类空参构造函数,那结果就是null //super()调用父类的空参构造函数 //super(**)----父类的带参构造函数 super(pname);//显式调用父类带参构造函数 this.salary = s; System.out.println(pname+"的工资是:"+getSalary()); } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } }
最后是Manager类:
package JavaConstructorFunChain; public class Manager extends Employee { private double benfit; public Manager(String pname, double s,double b) { super(pname, s); this.benfit = b; System.out.println(pname+"的工资是:"+s+","+"奖金是"+getBenfit()); } public Manager() { System.out.println("创建经理"); } public double getBenfit() { return benfit; } public void setBenfit(double benfit) { this.benfit = benfit; } }
我们用Test类测试一下这三个类之间的联系以及怎样实现的构造函数链:
package JavaConstructorFunChain; public class Test { public static void main(String[] args) { //子类的构造函数一定会 //隐式或显式调用父类的构造函数 Manager m = new Manager(); Manager m2 = new Manager("汤姆克鲁斯",10000000,300000); } }
结果展示:(特别要注意先输出的是父类的还是子类的。这边输出顺序要注意)
其中比较重要的一点是:
如果在一个类中自己定义了有参数的构造函数,那这个类原先默认的无参构造函数就会
被覆盖掉。
(如果把Person类的无参构造函数,那么Employee中无参构造函数就会报错)
子类的构造函数会隐式调用父类的无参构造函数。
所以如果有子类继承这个类,一旦子类中要隐式调用父类无参构造函数的时候会报错,
因此需要自己补好父类的无参构造函数。
还有就是在Employee类中关于this()和super()的用法:
//this()和super()不能同时存在,因为都要在第一行
//带不带参数视具体情况而定
//this()自己调用自己的构造函数
//super()调用父类的空参构造函数
//this(**)----自己的带参构造函数
//super(**)----父类的带参构造函数
标签:java构造函数链 java继承的使用 java中this和super的用法 java继承的结果输出顺序
原文地址:http://blog.csdn.net/u010792238/article/details/38441829