Java super 关键字详解

发布时间:2026/7/1 17:57:00
Java super 关键字详解 Java super 关键字详解super代表父类超类对象引用专门用于子类访问父类的成员解决子类与父类同名成员的冲突。一、super 三大用法1. super.成员变量访问父类同名属性子类、父类有相同变量名时直接写变量名默认访问子类super.变量访问父类。classParent{Stringname父类;}classSonextendsParent{Stringname子类;publicvoidshow(){System.out.println(name);// 子类System.out.println(super.name);// 父类}}2. super.方法()调用父类同名方法子类重写父类方法后想复用父类原有逻辑用super.方法()。classParent{publicvoidsay(){System.out.println(父类说话);}}classSonextendsParent{Overridepublicvoidsay(){super.say();// 先执行父类方法System.out.println(子类说话);}}3. super()调用父类构造方法super()必须写在子类构造方法第一行不写super()编译器会自动隐式添加无参super()父类只有有参构造时子类必须手动写super(参数)匹配super()和this()不能同时存在都要求第一行。classParent{Stringname;// 有参构造publicParent(Stringname){this.namename;}}classSonextendsParent{// 子类构造必须调用父类有参构造publicSon(Stringn){super(n);// 第一行调用父类构造}}二、super 与 this 对比关键字指代对象使用场景this当前子类对象访问本类属性/方法、调用本类构造this()super父类对象访问父类属性/方法、调用父类构造super()三、关键注意事项静态方法不能使用 superstatic 属于类不依赖对象而 super 依赖实例对象编译报错。publicstaticvoidtest(){super.say();// 错误}构造方法中super()只能出现一次且必须第一行多层继承中super只能直接访问直接父类不能跨代访问祖父类子类构造执行顺序先执行父类构造super→ 再执行子类构造。四、完整综合示例classAnimal{Stringtype动物;publicAnimal(Stringt){this.typet;}publicvoidrun(){System.out.println(type会跑);}}classDogextendsAnimal{Stringtype小狗;publicDog(){super(犬科);// 调用父类有参构造}Overridepublicvoidrun(){super.run();// 调用父类runSystem.out.println(super.typethis.type四条腿跑);}}publicclassTest{publicstaticvoidmain(String[]args){DogdognewDog();dog.run();}}输出犬科会跑 犬科小狗四条腿跑