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, ? - , , - ; ?
p2 Player. , BetterPlayer.
, p2 "" "BetterPlayer", .
, , BetterPlayer, - , BestPlayer.
, , ( ); playTheGame , Player BetterPlayer. - , playTheGame -, .
, BetterPlayer Player (p2), , , , BetterPlayer, . ", , , ". , .
, , p2 BetterPlayer, playTheGame - . , , , BetterPlayer, . , ( ) , , . playTheGame(new Player(), new BetterPlayer()) .
playTheGame(new Player(), new BetterPlayer())
, BetterPlayer playTheGame(), Player. playTheGame() p2.Move(), BetterPlayer.move(), Player.move().
BetterPlayer
playTheGame()
Player
p2.Move()
BetterPlayer.move()
Player.move()
, Player, playTheGame() - playTheGame(). , Player , , .move(), , playTheGame() .
.move()
, , .
, Player , , , . playTheGame() Player, , Player.
p2 Player . BetterPlayer, . , BetterPlayer Player.
IS-A . BetterPlayer IS-A.
"" . p2 , Player BetterPlayer IS-Player.
, .
. p2 BetterPlayer, , , Player, BetterPlayer.
, p1.move() p2.move() , playTheGame, - ( , Java ):
p1.move()
p2.move()
playTheGame
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)
, - StupidPlayer,
StupidPlayer
Player p2 = new BetterPlayer();
Player p2 = new StupidPlayer();
. .
, , ?
.
(Player[]) (List<Player>), , BetterPlayers Player.
Player[]
List<Player>
- , .
. . (, , , glu-, ), Shape, -
foreach Shape s in ArrayOfShapes{ s.draw(); // They all implement draw so it makes our life easy. }
, / . , , , . , , 5 , , 3 . , , . - , GRASP template wiki templates . It has fairly simple code examples that should help you see the meaning of classes extending other classes.
Source: https://habr.com/ru/post/1780522/More articles:Pls file playback using HTML5 audio - html5SpringSyncTransaction with Grails Searchable - springBASIC.js for toUpperCase - javascriptDynamic casting - c #https://translate.googleusercontent.com/translate_c?depth=1&pto=aue&rurl=translate.google.com&sl=ru&sp=nmt4&tl=en&u=https://fooobar.com/questions/1780521/surrogate-key-in-user-role-tables-for-desktop-app-whats-the-purpose&usg=ALkJrhhXTLYsvEwyU1J_iV18a4YFoLRAygAdding javascript variable to html textarea - javascriptWhen I create a C plugin for erlang, will it take full advantage of the spawning system? Is it blocked? - erlangService Broker receives only one message at a time - tsqlMPXJ library example in C # - c #Launching Google Web Toolkit Starter Application Not Working - javaAll Articles