Win a copy of Machine Learning Systems: Designs that scale this week in the Scala forum
or Xamarin in Action: Creating native cross-platform mobile apps in the Android forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

Upcasting doesn't work as intended; clarification needed  RSS feed

 
Ranch Hand
Posts: 434
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello,

I have taken code from Sierra/Bates, end of chapter 2, and am playing around with it:



Output is:

furry bray
stripes bray

How do I make output such as:

furry generic noise
stripes bray


Thanks!
 
Creator of Enthuware JWS+ V6
Saloon Keeper
Posts: 3097
255
Android Chrome Eclipse IDE
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Sandra,

You can't.

Two important rules apply here:
  • A reference variables type determines the methods that can be invoked on the object the variable is referencing
  • What method is called is decided at runtime based on the object type.

  • In your case the the method makeNoise() is allowed because the class of the reference variable Mammal has a method called makeNoise(). The actual method to be called is the method on the Zebra (because it overrides the one in Mammal)

    Regards,
    Frits
     
    Sandra Bachan
    Ranch Hand
    Posts: 434
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    Totally forgot about the overriding part; now I understand
     
    Sandra Bachan
    Ranch Hand
    Posts: 434
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    By the way, I noticed when I comment out makeNoise() in Zebra, it invokes makeNoise() in Mammal:




    Output:

    furry generic noise
     
    Frits Walraven
    Creator of Enthuware JWS+ V6
    Saloon Keeper
    Posts: 3097
    255
    Android Chrome Eclipse IDE
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    correct, now it just inherits the method from its super class.

    Regards,
    Frits
     
    Ranch Hand
    Posts: 37
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator

    Sandra Bachan wrote:Hello,

    I have taken code from Sierra/Bates, end of chapter 2, and am playing around with it:



    Output is:

    furry bray
    stripes bray

    How do I make output such as:

    furry generic noise
    stripes bray


    Thanks!





    Output

    furry bray
    furry bray
    furry bray
     
    If you try to please everybody, your progress is limited by the noisiest fool. And this tiny ad:
    Rocket Oven Kickstarter - from the trailboss
    https://coderanch.com/t/695773/Rocket-Oven-Kickstarter-trailboss
    • Post Reply Bookmark Topic Watch Topic
    • New Topic
    Boost this thread!