Java子类初始化父类引用变量报错:VariableDeclaratorId expected after this token
问题解决:VariableDeclaratorId expected after this token
你遇到的错误是因为不能直接在类的成员区域执行赋值语句,flyBehaviour = new FlyWithWings();属于可执行语句,必须放在构造方法、初始化块或者成员方法中。下面是几种正确的修复方式:
方式1:通过构造方法初始化
在子类中添加构造方法,在构造方法内完成赋值:
public class MallarDuck extends Duck { public MallarDuck() { flyBehaviour = new FlyWithWings(); } }
方式2:使用实例初始化块
实例初始化块会在构造方法执行前运行,适合初始化逻辑:
public class MallarDuck extends Duck { { flyBehaviour = new FlyWithWings(); } }
不推荐的方式:重新声明变量(会隐藏父类成员)
如果在子类中重新声明flyBehaviour,虽然语法上能通过,但会隐藏父类的同名变量,破坏继承的封装性,不建议这么做:
public class MallarDuck extends Duck { Flyable flyBehaviour = new FlyWithWings(); }
另外补充:父类Duck中的perfomFly方法拼写有误,正确写法是performFly,避免后续调用时出现方法名错误。
内容的提问来源于stack exchange,提问作者Daria
相关产品推荐
相关产品推荐

