作者小头像 Lv.1
44 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
35
9
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

发布时间 2026/10/21 18:52:20 最后回复 yd_225649965 2026/10/21 21:18:35 版块 智慧园区
13 5 0
他的回复:
「父类引用关键字」在 Java 和 JavaScript 里含义不完全一样,分开说清楚会更实用。一、Java 里的 super调用父类构造器:写在子类构造器第一行,且不能和 this(...) 同时出现。子类不显式写时,编译器会自动插入 super()——所以父类没有无参构造器时,子类必须显式调用父类的有参构造,否则编译期直接报错。访问被隐藏的字段:super.field 取的是父类那一份,用于子类声明了同名字段、又想读父类值的场景。调用被重写的方法:super.method() 执行父类实现,常用来在重写里保留父类逻辑(模板方法模式的写法)。限制:静态方法和静态上下文里不能用 super;父类中 private 的成员通过 super 也访问不到(不可见性由访问修饰符决定,super 不越过它)。二、JavaScript 里的 super作为函数调用:只能在派生类(extends)的构造器里用,作用是执行父类构造函数,且必须在访问 this 之前调用——否则抛 ReferenceError,因为 this 要等父类构造完成后才初始化。作为属性访问:super.method() 沿父类原型链找方法,但调用时 this 仍指向当前子类实例,所以父类方法里访问到的自有属性是子类的值。静态方法里的 super 指向父类构造函数本身,不是父类原型。只能在类的方法和构造器里用;写在普通对象方法里不合法。箭头函数不绑定自己的 super,取的是外层作用域的绑定,这点最容易误用。三、两个容易踩的点Java 里「子类构造器漏调父类有参构造」是最常见的编译错误来源,报错信息通常只说找不到合适的构造器,容易被误判成参数类型问题。JS 里在 super() 之前访问 this(包括读字段、调自己的方法)都会直接抛错,和 Java 的「必须第一行」是两套不同的约束来源,别混用经验。简单记:Java 的 super 是「指向父类那一份实现」,受访问修饰符约束;JS 的 super 是「沿原型链取父类方法,但 this 保持为当前实例」,前者管可见性,后者管调用时的接收者。