多态性中是否可以使用超类的对象访问子类的变量 [英] Is it possible to access variable of subclass using object of superclass in polymorphism

查看:313
本文介绍了多态性中是否可以使用超类的对象访问子类的变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用类KalaPlayer的对象访问类KeyBoardPlayer的状态变量?

How can I access state variable of class KeyBoardPlayer with an object of class KalaPlayer?

/**
  * An abstract class representing a player in Kala.  Extend this class
  * to make your own players (e.g. human players entering moves at the keyboard
  * or computer players with programmed strategies for making moves).
  */
public abstract class KalaPlayer {

    /**
      * Method by which a player selects a move.
      * @param gs The current game state
      * @return A side pit number in the range 1-6
      * @throws NoMoveAvailableException if all side pits for the player are empty 
      * (i.e. the game is over)
      */
    public abstract int chooseMove(KalaGameState gs) throws NoMoveAvailableException;

}



public class KeyBoardPlayer extends KalaPlayer {
    /**
     * Method by which a player selects a move.
     * @param gs The current game state
     * @return A side pit number in the range 1-6
     * @throws NoMoveAvailableException if all side pits for the player are empty 
     * (i.e. the game is over)
     */
    public KalaGameState state;

    public KeyBoardPlayer() {
        System.out.println("Enter the number of stones to play with: ");
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
            int key = Integer.parseInt(br.readLine());  
            state=new KalaGameState(key);
            //key=player1.state.turn;
        } catch(IOException e) {
            System.out.println(e);
        }
    }

    public int chooseMove(KalaGameState gs) throws NoMoveAvailableException{
        return 0;
    }
}

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class KalaGame {
    KalaPlayer player1,player2;

    public KalaGame(KeyBoardPlayer Player1,KeyBoardPlayer Player2) {
        //super(0);
        player1=new KeyBoardPlayer();
        player2 = new KeyBoardPlayer(); 
        //player1=Player1;
        //player2=Player2;
        //player1.state  ****how can i access the stae variable from Keyboard CLass using object from KalaPlayer 
        key=player1.state.turn;
    }

    public void play() {
        System.out.println("Enter the number of stones to play with: ");
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
            int key = Integer.parseInt(br.readLine());  
            System.out.println(key);
            KalaGameState state=new KalaGameState(key);
            printGame();
        } catch(IOException  e) {
            System.out.println(e);
        }
    }
}

推荐答案

您不能.

无法从其父级访问子类的成员.如果有的话,以下内容将导致整体混乱:

There is no ability access members of a subclass from its parent. If there were, the following would cause mass chaos:

public class Vehicle
{

}

public class Car extends Vehicle 
{
    SteeringWheel _wheel = new SteeringWheel();

    public SteeringWheel getSteeringWheel { return _wheel; }

    public SteeringWheel setSteeringWheel(SteeringWheel value)
    {
        _wheel = value;
    }
}

public class Bicycle extends Vehicle
{

}

然后:

Vehicle myVehicle = new Bicycle();

// This call couldn't possibly work since Bicylce has no steering wheel
// and Vehicle isn't aware of what the type of the is/isn't.
SteeringWheel myWheel = myVehicle.getSteeringWheel();

这篇关于多态性中是否可以使用超类的对象访问子类的变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆