Java 实际参数与形式参数不匹配,但它们匹配吗?
Posted
技术标签:
【中文标题】Java 实际参数与形式参数不匹配,但它们匹配吗?【英文标题】:Java actual arguments don't match formal arguments, but they do? 【发布时间】:2012-12-06 23:45:39 【问题描述】:我有一个扩展实体的 Player 类:
玩家:
public class Player extends Entity
public Player(char initIcon, int initX, int initY)
//empty constructor
...
实体:
public Entity(char initIcon, int initX, int initY)
icon = initIcon;
x = initX;
y = initY;
...
这几乎是你所期望的,但是在编译时我得到一个错误
Player.java:2: error: constructor Entity in class Entity cannot be applied to the given types:
public Player(char initIcon, int initX, int initY)
required: char,int,int
found: no arguments
reason: actual and formal argument lists differ in length
但它显然确实具有所需的参数。这里发生了什么?谢谢!
【问题讨论】:
你为什么不做super(chat, int, int)
?
【参考方案1】:
你需要用super
调用它的构造函数来初始化超类
public Player(char initIcon, int initX, int initY)
super(initIcon, initX, initY);
【讨论】:
【参考方案2】:您的超类构造函数有 3 个参数,并且似乎没有空构造函数。因此,您的子类构造函数应该显式调用传递值的超类构造函数。
public class Player extends Entity
public Player(char initIcon, int initX, int initY)
//empty constructor
super(initIcon,initX,initY);
...
【讨论】:
【参考方案3】:您需要从扩展类的构造函数中显式调用基类的构造函数。你这样做:
public class Player extends Entity
public Player(char initIcon, int initX, int initY)
super(initIcon, initX, initY);
// rest of player-specific constructor
【讨论】:
【参考方案4】:没有显式调用超级构造函数(如其他答案或下面所示) 所以VM将使用一个隐式的0-arg构造函数......但这个构造函数不存在。所以你必须显式调用一个有效的超级构造函数:
public class Player extends Entity
public Player(char initIcon, int initX, int initY)
super(initIcon,initX,initY);
【讨论】:
【参考方案5】:当子类继承父类时,默认调用父类的默认构造函数。 在上述情况下,您已经在 Parent 类中定义了参数构造函数,因此 JVM 不提供默认值,并且您的子类正在调用那里不存在的父默认构造函数。 要么在Parent类中指定默认构造函数,要么使用super调用父类的Parametric构造函数。
public class Player extends Entity
public Player()
public Player(char initIcon, int initX, int initY)
//empty constructor
或
public Player
(char initIcon, int initX, int initY)
super(initIcon, initX, initY);
【讨论】:
以上是关于Java 实际参数与形式参数不匹配,但它们匹配吗?的主要内容,如果未能解决你的问题,请参考以下文章
mysql 在查字符串字段中 条件参数传为数字0查到与实际数据不匹配问题
参数标签'(stringInterpolationSegment :)'与任何可用的重载都不匹配
org.springframework.dao.InvalidDataAccessApiUsageException:参数值与预期类型 java.time.LocalDateTime 不匹配