首页 > 解决方案 > Java 多态的行为不像我想象的那样

问题描述

我有点难以理解为什么我的父类没有使用子类中可用的相同签名的方法。

代码有点长,所以我只显示我不理解的代码片段。

父类:

public GameOutcome endGame(GameState game) {
GameOutcome outcome = calculateOutcome(game);    
numberOfGames += 1;
switch(outcome) {

以及 endGame 正在调用的方法:

private GameOutcome calculateOutcome(GameState game) {
System.out.println("Wrong method being used");
switch(game) {
case XWIN:
  return myMove == CellValue.X ? GameOutcome.WIN : GameOutcome.LOSE;

孩子:

private GameOutcome calculateOutcome(GameState game) {
int tracker;

switch(game) {
case XWIN:

我的理解是,在使用父类之前,父类将检查子类中是否存在calculateOutcome。

此代码编译并运行,但它没有使用我想要的方法。(孩子里面的那个)

我看到的唯一可能导致这个问题的是父类已经在使用它的一个函数来调用另一个函数,所以它不会打扰检查孩子?

标签: javainheritancemethodspolymorphism

解决方案


很抱歉没有早点发布这个。

基本上我只需要修改孩子,而不接触父母。

我遇到的问题:

1)孩子试图覆盖私有方法,所以它总是被忽略。

2)可以解决这个问题的公共父方法必须修改几个私有方法,我不确定如何从孩子那里触摸。

我通过覆盖 Public Parent 方法解决了这个问题,然后使用 super() 以便 Parent 修改自己的变量。这使我可以将必须​​重写的 Private 方法保留为 Private。

我也为我最初的问题不够清楚而道歉。


推荐阅读