
super代表父类超类对象引用仅存在子类中用来访问父类的成员和代表当前对象的this对应。一、super 三种核心用法1. super.成员变量访问父类同名成员变量子类和父类属性重名时默认优先访问子类用super.属性指定父类。classParent{Stringname父类;}classSonextendsParent{Stringname子类;voidshow(){System.out.println(name);// 子类自身System.out.println(super.name);// 父类super访问父类}}2. super.方法()调用父类重写前的方法子类重写父类方法后直接调用是子类自身实现super.方法()执行父类原始逻辑。classParent{voidsay(){System.out.println(父类说话);}}classSonextendsParent{Overridevoidsay(){super.say();// 先调用父类方法System.out.println(子类说话);}}3. super()调用父类构造方法规则super()必须写在子类构造方法第一行不写super()编译器默认隐式添加无参super()父类只有有参构造子类必须手动super(参数)否则编译报错super()和this()不能同时存在构造器都要求放第一行。classParent{Stringname;// 有参构造Parent(Stringname){this.namename;}}classSonextendsParent{// 子类构造必须调用父类有参构造Son(){super(父类姓名);// 必须第一行}}二、super 与 this 对比特性thissuper含义当前类对象引用父类对象引用访问变量本类成员变量父类成员变量调用方法本类方法父类方法构造调用this()调用本类其他构造super()调用父类构造使用位置普通方法、构造方法普通方法、构造方法静态方法不能使用不能使用三、关键注意事项静态方法不能用 super / thisstatic 属于类没有实例对象super/this 依赖对象编译报错。构造器中super()隐含调用顶层 Object所有类直接/间接继承 Object无参构造最终都会走到super()调用 Object 构造。多层继承时super 只直接访问直接父类不能隔代访问爷爷类需要爷爷类提供方法中转。super 不能在静态代码块、静态方法中出现。四、完整综合示例// 父类classAnimal{Stringtype动物;publicAnimal(){System.out.println(父类无参构造);}publicvoidrun(){System.out.println(动物奔跑);}}// 子类classDogextendsAnimal{Stringtype小狗;publicDog(){super();// 调用父类构造可省略}Overridepublicvoidrun(){System.out.println(this.type);// 子类变量System.out.println(super.type);// 父类变量super.run();// 父类方法System.out.println(小狗四条腿跑);}}publicclassTest{publicstaticvoidmain(String[]args){DogdognewDog();dog.run();}}输出父类无参构造 小狗 动物 动物奔跑 小狗四条腿跑五、常见面试考点子类构造方法默认第一行隐式super()父类无无参构造子类必须显式super(实参)super()和this()互斥不能共存super 只能在实例方法/构造器static 中禁用方法重写后通过super.方法()复用父类逻辑。