首页 > 代码库 > java-继承super的使用

java-继承super的使用


public class Father {
    protected String name;
    int age;
    
    Father(){
        System.out.println("Father无参构造函数");
    }
    Father(String name){
        System.out.println("person的有参数构造函数 ");    
    }
    
    //public、private、protected、子类能继承的是public、protected
    //缺省的是受私有的,不能继承,
    //java不支持多继承,C++支持,
    //extends:扩展,不是继承的意思
    
    void jump(int lenth){
    System.out.println("lenth = "+lenth);
    }
    protected void jump(int num,int a) {
    // TODO Auto-generated method stub
    System.out.println("num = "+num+"a = "+a);
    }
    static void fly(){
     System.out.println("I can fly!");
    }
}






public class Daughter extends Father {

    Daughter(){
        //super();
        //在子类的构造函数当中,必须调用父类的构造函数,
        //super();默认调用父类的无参构造函数
        System.out.println("Daughter的无参数构造函数");
    }
Daughter(String name){
    super("");
    System.out.println("Daughter的带参数构造函数:name = "+name);
}
    public static void main(String[] a){    
        /*不论你使用的是自己的哪一个构造函数,只要你不指明使用父类的哪个构造函数(如果父类由多个构造函数)
        父类都会在你调用自己的构造函数的同时,先调用自己的默认构造函数,如果父类由切仅有一个有参数的构造函数,那么就要小心了,
        因为当你调用自己的构造函数的同时是父类会强加给你一自己的构造函数,而父类给你强加的构造函数确实有参数的,它不会自己去加一个参数进去,
        所以它还是以super()的形式给你,那么此时就相当于你自己在自己的构造函数中添加了"super()"这么一段代码,这当然是错的啦,因为父类没有这个构造函数
        所以你需要把正确的形式写出来"super("")",所以这个有点强买强卖的意思。如果父类由一个无参和一个有参数的构造函数,那么你就无需指明了,因为父类给你强加的这个构造函数是有的
        */
        new Daughter();
        new Daughter("Daughter");
        
        //在静态方法中不能super
        //super.jump(100);
        //super();
    }
}
/*
 * 为什么父类会把自己的构造函数强加给子类,因为子类不能够继承父类的
 * 构造函数,
 * 而且,构造函数一般承载在初始化成员变量的作用,而子类如果无法使用父类的构造函数
 * 那么在初始化继承来成员变量的时候就需要自己再写一遍方法。
 * */

java-继承super的使用