Win a copy of Programmer's Guide to Java SE 8 Oracle Certified Associate (OCA) this week in the OCAJP forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Upcasting doesn't work as intended; clarification needed

 
Sandra Bachan
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!
 
Frits Walraven
Creator of Enthuware JWS+ V6
Saloon Keeper
Pie
Posts: 2418
95
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
    Pie
    Posts: 2418
    95
    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
     
    Tahir Akram
    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
     
    • Post Reply
    • Bookmark Topic Watch Topic
    • New Topic