• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 18:23
CEST 00:23
KST 07:23
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
[ASL22] Ro24 Preview: Summer's End9Serral wins HomeStory Cup 2915Serral wins Maestros of the Game 244ByuL, and the Limitations of Standard Play3Team Liquid Map Contest #22: Results and Winners7
Community News
Weekly Cups (August 10-16): SHIN doubles2GSTL Returns in 2026!45Weekly Cups (Aug 3-9): Protoss get shut out7RSL goes to London! 2026 Offline Finals Nov 21-2212Weekly Cups (July 27-Aug 2): SHIN's big week0
StarCraft 2
General
GSTL Returns in 2026! SC4ALL II: SC2 Player Announcement 6/8 - Maru Balance hotfix patch 5.0.16b (July 16) Serral wins Maestros of the Game 2 Weekly Cups (August 10-16): SHIN doubles
Tourneys
SC2 AI Tournament 2026 Fall 2026 GSTL Announcement Master Swan Open (Global Bronze-Master 2) PIG STY FESTIVAL 8.0! (13 - 23 August) WardiTV Mondays
Strategy
[G] Having the right mentality to improve
Custom Maps
Nexus Wars 2021 GUIDE [M] (2) Industrial Park
External Content
The PondCast: SC2 News & Results Mutation # 539 Thunder Dome Mutation # 538 Media Blackout Mutation # 537 Hostile Territory
Brood War
General
Are you ready for ASL 22? NEW HYPE VIDEO BW General Discussion [ASL22] Ro24 Preview: Summer's End BGH Auto Balance -> http://bghmmr.eu/ How Famous was FlaSh before his Debut?
Tourneys
Small VOD Thread 2.0 [Megathread] Daily Proleagues KCM Race Survival 2026 Season 3 [ASL22] Ro24 Group C
Strategy
Odyssey Mineral Stack Saturation Fighting Spirit mining rates Any training maps people recommend? Simple Questions, Simple Answers
Other Games
General Games
Nintendo Switch Thread General RTS Discussion Thread Anyone here play Quakeworld back in the day? Stormgate/Frost Giant Megathread EVE Corporation
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
[TL LoL EUW IHs] Teemo shall perish TSM pausing esports and CLG Dead
Heroes of the Storm
Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Power Rank TL Mafia Community Thread NeO.D_StephenKing vs This Guy From 1 Million Dance
Community
General
US Politics Mega-thread Russo-Ukrainian War Thread Dating: How's your luck? Artificial Intelligence Thread The Letting Off Steam Thread
Fan Clubs
The Creator Fan Club MarineLorD Fan Club The ShoWTimE Fan Club
Media & Entertainment
Movie Discussion! Anime Discussion Thread Series you have seen recently...
Sports
Football (Soccer) Thread MLB/Baseball 2023 TeamLiquid Health and Fitness Initiative For 2023 NBA General Discussion
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread Simple Questions Simple Answers FPS when play League Of Legend on laptop
TL Community
The Automated Ban List Northern Ireland Global Starcraft
Blogs
Young Players Exit Esports E…
TrAiDoS
LOCKPICKING NOOB
LUCKY_NOOB
Cathedral Of CS And NY pizza a…
FuDDx
Please support my new stand…
Peanutsc
Customize Sidebar...

Website Feedback

Closed Threads



Active: 5196 users

[Java] Brain teaser!

Blogs > Qzy
Post a Reply
1 2 Next All
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
September 22 2010 15:57 GMT
#1
Okay, my uni-teacher likes to give out small brain teasers, to think about. I'm pretty good with java, but this one I couldn't solve - so please do give a hint, if anyone does know the answer!

TAStudent ta; //Extends student
PhDStudent phd; //Extends TAStudent
Student student;

In TAStudent display() { System.out.println(“I am a TA”); }
In PhDStudent display() { System.out.println(“I am a PhD student”); }
In Student display() { System.out.println(“I am a regular student”); }

student = phd; // line 1
student.display(); // line 2

Modify, if necessary, line 1 in order to get the call to display() in line 2 run the method in the base class.

I guess they want us to outprint "I am a regular student"?

***
TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
Cambium
Profile Blog Joined June 2004
United States16368 Posts
September 22 2010 16:00 GMT
#2
use [code] tags please.
When you want something, all the universe conspires in helping you to achieve it.
Cambium
Profile Blog Joined June 2004
United States16368 Posts
Last Edited: 2010-09-22 16:05:19
September 22 2010 16:02 GMT
#3
On September 23 2010 00:57 Qzy wrote:
Okay, my uni-teacher likes to give out small brain teasers, to think about. I'm pretty good with java, but this one I couldn't solve - so please do give a hint, if anyone does know the answer!

TAStudent ta = new TAStudent(); //Extends student
PhDStudent phd = new PhDStudent(); //Extends TAStudent
Student student = new Student(); //assuming Student is not abstract

In TAStudent display() { System.out.println(“I am a TA”); }
In PhDStudent display() { System.out.println(“I am a PhD student”); }
In Student display() { System.out.println(“I am a regular student”); }

student = phd; // line 1
student.display(); // line 2

Modify, if necessary, line 1 in order to get the call to display() in line 2 run the method in the base class.

I guess they want us to outprint "I am a regular student"?


I don't really get the question, must you assign something to student? Otherwise, if you comment out line 1, you'd get exactly what you are looking for? If you can't comment it out, you can just do

student = student;
When you want something, all the universe conspires in helping you to achieve it.
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
September 22 2010 16:09 GMT
#4
On September 23 2010 01:02 Cambium wrote:
Show nested quote +
On September 23 2010 00:57 Qzy wrote:
Okay, my uni-teacher likes to give out small brain teasers, to think about. I'm pretty good with java, but this one I couldn't solve - so please do give a hint, if anyone does know the answer!

TAStudent ta = new TAStudent(); //Extends student
PhDStudent phd = new PhDStudent(); //Extends TAStudent
Student student = new Student(); //assuming Student is not abstract

In TAStudent display() { System.out.println(“I am a TA”); }
In PhDStudent display() { System.out.println(“I am a PhD student”); }
In Student display() { System.out.println(“I am a regular student”); }

student = phd; // line 1
student.display(); // line 2

Modify, if necessary, line 1 in order to get the call to display() in line 2 run the method in the base class.

I guess they want us to outprint "I am a regular student"?


I don't really get the question, must you assign something to student? Otherwise, if you comment out line 1, you'd get exactly what you are looking for? If you can't comment it out, you can just do

student = student;


It had to be cast, or method call - can't change ie student = student.
TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
fabiano
Profile Blog Joined August 2009
Brazil4644 Posts
September 22 2010 16:10 GMT
#5

public class Student
{
public void display()
{
System.out.println("I am a regular student.");
}
}

public class TAStudent extends Student
{
public void display()
{
System.out.println("I am a TA.");
}
}

public class PhDStudent extends TAStudent
{
public void display()
{
System.out.println("I am a PhD student.");
}
}

TAStudent ta;
PhDStudent phd;
Student student;

student = phd;
student.display();


This way is easier to picture the whole.
Im short on time, gotta get the bus in 5 minutes, so I will be trying to help more when I get to my University, if no one has answered yet.
"When the geyser died, a probe came out" - SirJolt
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
September 22 2010 16:15 GMT
#6
I'll just this line in (it's an extra line i didn't paste)

"Whatever modification you perform, be it a casting, another method call, etc., the
variable student MUST appear on the left side of the statement and the variable
phd MUST appear on the right side of the same statement."
TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
LastWish
Profile Blog Joined September 2004
2015 Posts
September 22 2010 16:24 GMT
#7
Ok I'm more of a C# programmer, so I might be wrong.
However in C# you must use virtual and override keywords to make inheritance work for methods properly.
So if the same applies for Java, then there is no need to modify line 1 - the program is correct.
The student.display() always calls the base method no matter which class it was instanced to.
- It's all just treason - They bring me down with their lies - Don't know the reason - My life is fire and ice -
NoUShutUp
Profile Joined January 2008
United States172 Posts
September 22 2010 16:30 GMT
#8
Hmm... I remember having something like this in my class a year ago. I'm not sure if I'm right but here is my thought process.

During compile time, Java only checks to see if types are valid and if there is a method call for that type. This means during compile time it checks to see if a Student can be a PhDStudent in line 1 and if the class Student has a display method. I am pretty sure both lines are valid.

During runtime in line 1, you are trying to store a PhDStudent into a Student. (This is where it gets iffy for me). I think you can cast phd to Student so then the variable student will be treated as a Student. Then when it calls on student.display(). It will recognize that student is still Student type and call on the base display method.
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
September 22 2010 16:31 GMT
#9
On September 23 2010 01:24 LastWish wrote:
Ok I'm more of a C# programmer, so I might be wrong.
However in C# you must use virtual and override keywords to make inheritance work for methods properly.
So if the same applies for Java, then there is no need to modify line 1 - the program is correct.
The student.display() always calls the base method no matter which class it was instanced to.


Yeah usually you write a @override, but that's not the point . The methods _are_ overridden Nicely spotted tho, sir!
TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
Cambium
Profile Blog Joined June 2004
United States16368 Posts
September 22 2010 16:31 GMT
#10
On September 23 2010 01:24 LastWish wrote:
Ok I'm more of a C# programmer, so I might be wrong.
However in C# you must use virtual and override keywords to make inheritance work for methods properly.
So if the same applies for Java, then there is no need to modify line 1 - the program is correct.
The student.display() always calls the base method no matter which class it was instanced to.


Java methods allow override by default.
When you want something, all the universe conspires in helping you to achieve it.
Cambium
Profile Blog Joined June 2004
United States16368 Posts
September 22 2010 16:37 GMT
#11
On September 23 2010 01:30 NoUShutUp wrote:
Hmm... I remember having something like this in my class a year ago. I'm not sure if I'm right but here is my thought process.

During compile time, Java only checks to see if types are valid and if there is a method call for that type. This means during compile time it checks to see if a Student can be a PhDStudent in line 1 and if the class Student has a display method. I am pretty sure both lines are valid.

During runtime in line 1, you are trying to store a PhDStudent into a Student. (This is where it gets iffy for me). I think you can cast phd to Student so then the variable student will be treated as a Student. Then when it calls on student.display(). It will recognize that student is still Student type and call on the base display method.


PhDStudent is a subclass of Student, regardless whether the phd object is casted to Student or TAStudent, the instance will always be of the PhD class. This is the underlying principle of polymorphism.
When you want something, all the universe conspires in helping you to achieve it.
Cambium
Profile Blog Joined June 2004
United States16368 Posts
Last Edited: 2010-09-22 16:48:19
September 22 2010 16:47 GMT
#12
As far as I know, there is no way to invoke Student's display method through the phd object.

This is what I would do:


student = phd == null ? student : student;

It satisfies the requirement of having student on the left side of the = operator, and phd on the right.

You might also be able to do something tricky with reflection by using the phd object to get the Student class's full name.
When you want something, all the universe conspires in helping you to achieve it.
Logo
Profile Blog Joined April 2010
United States7542 Posts
Last Edited: 2010-09-22 16:48:57
September 22 2010 16:47 GMT
#13
Probably cheating but...
student = phd.getClass().getSuperClass().getSuperClass().newInstance();

though as written it seems impossible/pointless because phd is null so you'd just use the logic of phd == null ?... explained in the post above mine.
Logo
AcrossFiveJulys
Profile Blog Joined September 2005
United States3612 Posts
September 22 2010 16:50 GMT
#14
as someone above said, either comment out the first line, or if you need to keep it as student = phd, you can do something cute like

student = (phd.super(phd)).super(phd);
gale_f0rce
Profile Joined June 2009
United States9 Posts
September 22 2010 16:51 GMT
#15
Isn't it just

student = (Student)phd;

Seems really simple
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
September 22 2010 16:52 GMT
#16
On September 23 2010 01:50 AcrossFiveJulys wrote:
student = (phd.super(phd)).super(phd);


Okay, give me like 1 hour to figure out what the heck that does :D
TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
September 22 2010 16:54 GMT
#17
On September 23 2010 01:51 gale_f0rce wrote:
Isn't it just

student = (Student)phd;

Seems really simple


Nooo, that would just throw out "I'm a phd student" .
TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
Cambium
Profile Blog Joined June 2004
United States16368 Posts
September 22 2010 16:55 GMT
#18
On September 23 2010 01:47 Logo wrote:
Probably cheating but...
student = phd.getClass().getSuperClass().getSuperClass().newInstance();


I like this, except you have to fight Java generics to get it working properly!
When you want something, all the universe conspires in helping you to achieve it.
gale_f0rce
Profile Joined June 2009
United States9 Posts
September 22 2010 17:00 GMT
#19
On September 23 2010 01:54 Qzy wrote:
Show nested quote +
On September 23 2010 01:51 gale_f0rce wrote:
Isn't it just

student = (Student)phd;

Seems really simple


Nooo, that would just throw out "I'm a phd student" .


No, the variable student is now of type Student, since (Student)phd is of type Student. This means that calling student.display() prints “I am a regular student.”
Logo
Profile Blog Joined April 2010
United States7542 Posts
Last Edited: 2010-09-22 17:05:04
September 22 2010 17:02 GMT
#20
On September 23 2010 02:00 gale_f0rce wrote:
Show nested quote +
On September 23 2010 01:54 Qzy wrote:
On September 23 2010 01:51 gale_f0rce wrote:
Isn't it just

student = (Student)phd;

Seems really simple


Nooo, that would just throw out "I'm a phd student" .


No, the variable student is now of type Student, since (Student)phd is of type Student. This means that calling student.display() prints “I am a regular student.”


It doesn't work like that =/. The reference to the object thinks it's a student, but the object itself is still a phd student.

Put it like this if you had
PhdStudent phd = new PhdStudent();
Student s = (Student)phd;
phd.displayName();

What would the 3rd line put out? Clearly not "I Am a regular student". Yet Both line 1 and line 2 point to the same object so how could they have different outputs.
Logo
1 2 Next All
Please log in or register to reply.
Live Events Refresh
Next event in 1h 38m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
CosmosSc2 23
StarCraft: Brood War
Dewaltoss 112
ajuk12(nOOB) 12
Dota 2
Dendi1293
XaKoH 478
canceldota73
League of Legends
Doublelift4160
Counter-Strike
summit1g5802
minikerr62
Other Games
gofns16149
Grubby2771
Liquid`RaSZi1848
shahzam407
C9.Mang0342
hiko265
hungrybox242
White-Ra115
RotterdaM90
NeuroSwarm70
Mew2King62
ViBE44
Trikslyr36
JuggernautJason30
Organizations
Other Games
BasetradeTV282
[ Show 12 non-featured ]
StarCraft 2
• RyuSc2 36
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• Migwel
StarCraft: Brood War
• blackmanpl 30
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• WagamamaTV540
Other Games
• Shiphtur304
Upcoming Events
Replay Cast
1h 38m
Escore
11h 38m
PiG Sty Festival
13h 38m
Serral vs Reynor
HeRoMaRinE vs herO
Big Brain Bouts
17h 38m
MaNa vs Kelazhur
Nicoract vs HeRoMaRinE
Serral vs Cure
CranKy Ducklings
1d 11h
PiG Sty Festival
1d 13h
Zoun vs Solar
SHIN vs Maru
Patches Events
1d 17h
Sparkling Tuna Cup
2 days
PiG Sty Festival
2 days
The Patches Monday
3 days
[ Show More ]
GSL
4 days
PiGosaur Cup
5 days
Replay Cast
5 days
Replay Cast
6 days
The PondCast
6 days
Liquipedia Results

Completed

Proleague 2026-08-19
CranK Gathers Season 4: BW vs SC2 Team League
Eternal Conflict S2 Finale

Ongoing

KCM Race Survival 2026 Season 3
K-JUNGMAN
ASL Season 22
Super Anchor Qualifying S3
CSL Season 22: Qualifier 1
RSL Revival: Season 6
PiG Sty Festival 8.0
META DYMY #4
Esports World Cup 2026
Esports World Cup 2026: LCQ
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
XSE Pro League 2026
IEM Cologne Major 2026

Upcoming

Escore Tournament S3: W8
CSL Season 22: Qualifier 2
CSL 2026 AUTUMN (S22)
Acropolis #5
Acropolis #5 - TRS
Blizzard Classic Cup 2026
Acropolis #5 - GSA
HSC XXX
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
RSL Offline Finals
Big Dog Cup 2026 Div 1
IEM Beijing 2026
Stake Ranked Episode 5
PGL Masters Bucharest 2026
Thunderpick World Champ. '26
ESL Pro League Season 24
Stake Ranked Episode 4
1win Private Club #1
Logitech G Play Connect 2026
SL StarSeries Fall 2026
FISSURE Playground #3
BLAST Open Fall 2026
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.