What is the advantage of declaring an object of one type, for example, in the case of another?

Possible duplicate:
What is Base b2 = new Child (); to label?

I am a Java beginner. I understand the concepts of class inheritance, but there is one thing that I do not quite understand. I read through Java for dummies, and that explains polymorphism. He gives this code as an example:

class Player {
    public void move() {...

class BetterPlayer extends Player {
    public void move() {...

public class TicTacToeApp {
    public static void main(String[] args) {
        Player p1 = new Player();
        Player p2 = new BetterPlayer();
        playTheGame(p1, p2);
    }

    public static void playTheGame(Player p1, Player p2) {
        p1.move();
        p2.move();
    }
}

Why was p2 created as a Player object? Here is my understanding:

If p2 is a BetterPlayer object (declared as follows: BetterPlayer p2 = new BetterPlayer ...):
-upcasting automatically, so it will still work with the playTheGame method
-p2 can be used by any methods that require a BetterPlayer object

Player, p2 , BetterPlayer, BetterPlayer, ? - , , - ; ?

+3
10

p2 Player. , BetterPlayer.

, p2 "" "BetterPlayer", .

, , BetterPlayer, - , BestPlayer.

+5

, , ( ); playTheGame , Player BetterPlayer. - , playTheGame -, .

, BetterPlayer Player (p2), , , , BetterPlayer, . ", , , ". , .

, , p2 BetterPlayer, playTheGame - . , , , BetterPlayer, . , ( ) , , . playTheGame(new Player(), new BetterPlayer()) .

+4

, BetterPlayer playTheGame(), Player. playTheGame() p2.Move(), BetterPlayer.move(), Player.move().

, Player, playTheGame() - playTheGame(). , Player , , .move(), , playTheGame() .

, , .

, Player , , , . playTheGame() Player, , Player.

+2

​​p2 Player . BetterPlayer, . , BetterPlayer Player.

+2

IS-A . BetterPlayer IS-A.

"" . p2 , Player BetterPlayer IS-Player.

, .

. p2 BetterPlayer, , , Player, BetterPlayer.

+1

, p1.move() p2.move() , playTheGame, - ( , Java ):

if (p1 is Player)
   call Player.move(p1)
else if (p1 is BetterPlayer)
   call BetterPlayer.move(p1)

if (p2 is Player)
   call Player.move(p2)
else if (p2 is BetterPlayer)
   call BetterPlayer.move(p2)
+1

, - StupidPlayer,

Player p2 = new BetterPlayer();

Player p2 = new StupidPlayer();

. .

+1

, , ?

.

(Player[]) (List<Player>), , BetterPlayers Player.

0

- , .

. . (, , , glu-, ), Shape, -

foreach Shape s in ArrayOfShapes{
  s.draw();  // They all implement draw so it makes our life easy.
}
0

, / . , , , . , , 5 , , 3 . , , . - , GRASP template wiki templates . It has fairly simple code examples that should help you see the meaning of classes extending other classes.

0
source

Source: https://habr.com/ru/post/1780522/


All Articles