Java中的对象封装是面向对象编程思想的完美体现,但在Java的类继承关系中,各父类和子类之间的关系到底是怎样的呢?
本文就Java基础中父类及子类的构造方法参数传递讨论其关系。 若有这样的关系:爷爷、父亲及儿子,父亲继承自爷爷,儿子继承自父亲,代码如下:
创建爷爷类:
public class Grandpa {
private String name;
public Grandpa(String name){
this.name=name;
System.out.println("my name is "+name);
}
public void mySelf(){
System.out.println(name);
}
}
创建继承自爷爷类的父亲类:
public class Father extends Grandpa {
public Father(String name){
super(name);
}
}
创建继承自父亲的儿子类:
public class Son extends Father{
public Son(String name){
super(name);
}
}
在执行类的主函数中实例化这三个类,并调用爷爷类中的mySelf()方法
public class Test {
public static void main(String[] args) {
Son son=new Son("abc");
Father father=new Father("def");
Grandpa grandpa=new Grandpa("123");
son.mySelf();
father.mySelf();
grandPa.mySelf();
}
}
执行结果为:
abc
def
123
在实例化Son类是其构造函数传入的参数name在实例化的过程中实质上所传递的路线为下图所示:
super是对父类进行调用,在son的构造函数中使用super()实际上是直接调用了父类的构造函数(即Father类),同样Father类的构造函数使用super()调用了它的父类GrandPa类的构造函数,所以在Son(String name)这个构造函数中所传入的参数传入到函数中的super(name)中,从而传入到父类Father的构造函数中,在传入到GrandPa中,最终使用了Son(String name)这个构造函数中的参数完成了对最终父类构造函数的调用,同样Father类也是如此。