开发中经常用到继承,然而有时候会用到父类的方法,今天我遇到了集成的调用父类的方法,所以在这里总结一下:
构造方法:
A:
public class A{
public A(){
System.out.println("A----");
}
public void getData(){
System.out.println("getData---------A");
}
}
B:
public class B extends A{
public B(){
System.out.println("B-----");
}
public void getData(){
super.getData();
System.out.println("getDta______-B");
}
public static void main(String[] args){
B b = new B();
b.getData();
}
}
执行结果是:
这样就说明,构造方法,子类继承父类,当子类进行实例化的时候就会先调用父类的构造方法,而普通方法呢:
A和上面相同,
B类:
public class B extends A{
public B(){
System.out.println("B-----");
}
public void getData(){
//super.getData(); //仅仅将super调用方法进行了注释
System.out.println("getDta______-B");
}
public static void main(String[] args){
B b = new B();
b.getData();
}
}
执行结果
所以,普通方法不使用super进行显示的调用父类的方法,则父类已经被复写的方法是不会被调用的
然后由于是复写,所以B类也可以进行这样的修改:
public class B extends A{
public B(){
System.out.println("B-----");
}
public void getData(){
//super.getData();
System.out.println("getDta______-B");
}
public static void main(String[] args){
A b = new B();
b.getData();
}
}
执行结果
执行结果是这样的,说明这样多态的时候也不会先执行父类的被覆盖的方法
因此,得出结论,多层集成,生成对象的时候,会从最顶层的构造方法进行进行执行,知道最后到生成的这个对象中;普通方法进行调用的时候只有当你在复写的方法中明确的使用super进行调用父类的方法,否则,他已经被覆盖掉了,不在进行调用父类的方法了,也就是说,这个方法已经隐藏掉了
在进行更改一个实例:
A:
public class A{
public A(){
System.out.println("A----");
getData();//在A类中进行调用被复写的方法
}
public void getData(){
System.out.println("getData---------A");
}
}
B:
public class B extends A{
public B(){
System.out.println("B-----");
}
public void getData(){
//super.getData();
System.out.println("getDta______-B");
}
public static void main(String[] args){
A b = new B();
b.getData();
}
执行结果:
这行结果证明了,父类的方法已经被子类覆盖掉了,不在进行调用了,也就是隐藏了,只有在子类中进行明确的super调用,才会调用隐藏的方法。