继承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之前检查子类中是否存在calculateOutcome
这段代码编译并运行,但它没有使用我想要的方法。(孩子身上的那个)
我所看到的唯一可能导致这个问题的原因是父类已经在使用它的一个函数来调用另一个函数,所以它不会麻烦检查子类
# 1 楼答案
抱歉没有早点发布此消息
基本上,我必须只修改孩子,而不触及家长
我遇到的问题是:
1)子对象试图重写私有方法,因此它总是被忽略
2)可以解决此问题的公共父方法必须修改几个私有方法,我不确定如何从子方法中进行修改
我通过重写Public Parent方法解决了这个问题,然后使用super()使父对象修改自己的变量。这允许我将必须重写的私有方法保持为私有
我也为我最初的问题不够清楚而道歉