• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 06:40
CEST 12:40
KST 19:40
  • 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
Team Liquid Map Contest #22: Results and Winners7Code S Season 2 (2026): RO4 and Finals Preview12TL.net Map Contest #22 - Voting & Ladder Map Selection7Code S Season 2 (2026) - RO8 Preview8[ASL21] Finals Preview: Two Legacies21
Community News
ZeroSpace at Steam NextFest - Last free demo20Weekly Cups (June 8-14): Clem and Solar double, PTR tested0RSL: S6 Finals played at BlizzCon 202611Douyu Cup 2026: $20,000 Legends Event (June 26-28)12[BSL22] Non-Korean Championship from 13 to 28 June4
StarCraft 2
General
StarCraft II 5.0.16 PTR Patch Notes may 26th Is the larve respawn broken? Yamato Cup Series What kind of tool would you be interested in? Daily SC2 Player Grid - feedback wanted
Tourneys
Douyu Cup 2026: $20,000 Legends Event (June 26-28) GSL CK #4 20-21th June Sparkling Tuna Cup - Weekly Open Tournament Master Swan Open (Global Bronze-Master 2) Crank Gathers Season 4: BW vs SC2 Team League
Strategy
[G] Having the right mentality to improve
Custom Maps
Work In Progress Melee Maps [D]RTS in all its shapes and glory <3
External Content
The PondCast: SC2 News & Results Mutation # 531 Experimental Artillery Mutation # 530 One For All Mutation # 529 Opportunities Unleashed
Brood War
General
BGH Auto Balance -> http://bghmmr.eu/ STARCRAFT MOVIE - Last Night at the Command center BW General Discussion Battle cruiser feet vs Carrier fleet Fact based Zerg Upgrade Tier List
Tourneys
CSLAN 4 is Coming! [Megathread] Daily Proleagues Small VOD Thread 2.0 The Casual Games of the Week Thread
Strategy
Why doesn't anyone use restoration? Simple Questions, Simple Answers Relatively freeroll strategies Creating a full chart of Zerg builds
Other Games
General Games
Stormgate/Frost Giant Megathread Path of Exile Beyond All Reason ZeroSpace at Steam NextFest - Last free demo Nintendo Switch Thread
Dota 2
Looking for a Dota Mentor Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
Vanilla Mini Mafia
Community
General
US Politics Mega-thread Russo-Ukrainian War Thread [H]Internet/Gaming Cafe Tips and Tricks The Games Industry And ATVI UK Politics Mega-thread
Fan Clubs
The HerO Fan Club! The herO Fan Club!
Media & Entertainment
Movie Discussion! [Req][Books] Good Fantasy/SciFi books [TV/BOOK] *SPOILERS* Game of Thrones Discussion
Sports
2024 - 2026 Football Thread McBoner: A hockey love story TeamLiquid Health and Fitness Initiative For 2023 Formula 1 Discussion Cricket [SPORT]
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread Facing Challenges in Mobile App Development
TL Community
The Automated Ban List
Blogs
How To Predict Tilt in Espor…
TrAiDoS
An Exploration of th…
waywardstrategy
I'm an arrogant trash talke…
FlaShFTW
Gauntlet SC2: A Retrospectiv…
Ctone23
Why RTS gamers make better f…
gosubay
Customize Sidebar...

Website Feedback

Closed Threads



Active: 9638 users

[Java] Brain teaser!

Blogs > Qzy
Post a Reply
Normal
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
NoUShutUp
Profile Joined January 2008
United States172 Posts
September 22 2010 17:02 GMT
#21
New idea... just type it into a java compiler and test it out >_>
Cambium
Profile Blog Joined June 2004
United States16368 Posts
Last Edited: 2010-09-22 17:10:00
September 22 2010 17:04 GMT
#22
On September 23 2010 01:55 Cambium wrote:
Show nested quote +
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!


Going along with Logo's idea, the problem is that you need to add a try/catch block or make your caller method throw an Exception.


public class Runner {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
Student student = new Student();
@SuppressWarnings("unused")
TAStudent ta = new TAStudent();
PhDStudent phd = new PhDStudent();

student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd
.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
}
}



Output:

I am a regular student.


Reflection is such a hack =\
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 17:04 GMT
#23
On September 23 2010 02:02 NoUShutUp wrote:
New idea... just type it into a java compiler and test it out >_>


logo's right; it's the basic principles of polymorphism.
When you want something, all the universe conspires in helping you to achieve it.
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
Last Edited: 2010-09-22 17:31:50
September 22 2010 17:31 GMT
#24
On September 23 2010 02:04 Cambium wrote:
Show nested quote +
On September 23 2010 01:55 Cambium wrote:
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!


Going along with Logo's idea, the problem is that you need to add a try/catch block or make your caller method throw an Exception.


public class Runner {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
Student student = new Student();
@SuppressWarnings("unused")
TAStudent ta = new TAStudent();
PhDStudent phd = new PhDStudent();

student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd
.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
}
}



Output:

I am a regular student.


Reflection is such a hack =\


Wont work.. Im getting the exception. What does reflection do?


TAStudent ta = new TAStudent("1");
PhDStudent phd = new PhDStudent("2");
Student student = new Student("2");
try {
student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
} catch (IllegalAccessException ex) {
Logger.getLogger(PhDStudent.class.getName()).log(Level.SEVERE, null, ex);
}


TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
NoUShutUp
Profile Joined January 2008
United States172 Posts
September 22 2010 17:42 GMT
#25
On September 23 2010 02:04 Cambium wrote:
Show nested quote +
On September 23 2010 02:02 NoUShutUp wrote:
New idea... just type it into a java compiler and test it out >_>


logo's right; it's the basic principles of polymorphism.


I know it is... it just bugs me cause I don't remember :p
FreeZEternal
Profile Joined January 2003
Korea (South)3396 Posts
September 22 2010 17:44 GMT
#26
student = true ? student : phd;
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
Last Edited: 2010-09-22 17:51:46
September 22 2010 17:51 GMT
#27
On September 23 2010 02:44 FreeZEternal wrote:
student = true ? student : phd;


Read whole thread... . student and phd needs to be on the left and right side, respectively.
TG Sambo... Intel classic! Life of lively to live to life of full life thx to shield battery
zcxvbn
Profile Joined August 2009
United States257 Posts
September 22 2010 18:10 GMT
#28
On September 23 2010 01:52 Qzy wrote:
Show nested quote +
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


It doesn't compile
NA: proberecall
Slithe
Profile Blog Joined February 2007
United States985 Posts
September 22 2010 18:34 GMT
#29
On September 23 2010 02:51 Qzy wrote:
Show nested quote +
On September 23 2010 02:44 FreeZEternal wrote:
student = true ? student : phd;


Read whole thread... . student and phd needs to be on the left and right side, respectively.


I see at least one instance of student on the left and one instance of phd on the right. Isn't that what the rule is saying? Unless you u saying that student cannot be on the right hand side at all?
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
September 22 2010 18:48 GMT
#30
On September 23 2010 03:34 Slithe wrote:
Show nested quote +
On September 23 2010 02:51 Qzy wrote:
On September 23 2010 02:44 FreeZEternal wrote:
student = true ? student : phd;


Read whole thread... . student and phd needs to be on the left and right side, respectively.


I see at least one instance of student on the left and one instance of phd on the right. Isn't that what the rule is saying? Unless you u saying that student cannot be on the right hand side at all?


I think the point is to apply the object address to student-variable, and then some how call the objects super-super-method .
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 20:17 GMT
#31
On September 23 2010 02:31 Qzy wrote:
Show nested quote +
On September 23 2010 02:04 Cambium wrote:
On September 23 2010 01:55 Cambium wrote:
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!


Going along with Logo's idea, the problem is that you need to add a try/catch block or make your caller method throw an Exception.


public class Runner {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
Student student = new Student();
@SuppressWarnings("unused")
TAStudent ta = new TAStudent();
PhDStudent phd = new PhDStudent();

student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd
.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
}
}



Output:

I am a regular student.


Reflection is such a hack =\


Wont work.. Im getting the exception. What does reflection do?


TAStudent ta = new TAStudent("1");
PhDStudent phd = new PhDStudent("2");
Student student = new Student("2");
try {
student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
} catch (IllegalAccessException ex) {
Logger.getLogger(PhDStudent.class.getName()).log(Level.SEVERE, null, ex);
}




What's the exception? It's probably throwing an exception because the constructors take in parameters (you never specified this in the original problem).
When you want something, all the universe conspires in helping you to achieve it.
Qzy
Profile Blog Joined July 2010
Denmark1121 Posts
Last Edited: 2010-09-22 20:26:49
September 22 2010 20:26 GMT
#32
On September 23 2010 05:17 Cambium wrote:
Show nested quote +
On September 23 2010 02:31 Qzy wrote:
On September 23 2010 02:04 Cambium wrote:
On September 23 2010 01:55 Cambium wrote:
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!


Going along with Logo's idea, the problem is that you need to add a try/catch block or make your caller method throw an Exception.


public class Runner {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
Student student = new Student();
@SuppressWarnings("unused")
TAStudent ta = new TAStudent();
PhDStudent phd = new PhDStudent();

student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd
.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
}
}



Output:

I am a regular student.


Reflection is such a hack =\


Wont work.. Im getting the exception. What does reflection do?


TAStudent ta = new TAStudent("1");
PhDStudent phd = new PhDStudent("2");
Student student = new Student("2");
try {
student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
} catch (IllegalAccessException ex) {
Logger.getLogger(PhDStudent.class.getName()).log(Level.SEVERE, null, ex);
}




What's the exception? It's probably throwing an exception because the constructors take in parameters (you never specified this in the original problem).


Yeah sorry, it takes a string - does that matter?
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 20:39 GMT
#33
On September 23 2010 05:26 Qzy wrote:
Show nested quote +
On September 23 2010 05:17 Cambium wrote:
On September 23 2010 02:31 Qzy wrote:
On September 23 2010 02:04 Cambium wrote:
On September 23 2010 01:55 Cambium wrote:
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!


Going along with Logo's idea, the problem is that you need to add a try/catch block or make your caller method throw an Exception.


public class Runner {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
Student student = new Student();
@SuppressWarnings("unused")
TAStudent ta = new TAStudent();
PhDStudent phd = new PhDStudent();

student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd
.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
}
}



Output:

I am a regular student.


Reflection is such a hack =\


Wont work.. Im getting the exception. What does reflection do?


TAStudent ta = new TAStudent("1");
PhDStudent phd = new PhDStudent("2");
Student student = new Student("2");
try {
student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd.getClass()).getSuperclass()).getSuperclass()).newInstance();
student.display();
} catch (IllegalAccessException ex) {
Logger.getLogger(PhDStudent.class.getName()).log(Level.SEVERE, null, ex);
}




What's the exception? It's probably throwing an exception because the constructors take in parameters (you never specified this in the original problem).


Yeah sorry, it takes a string - does that matter?


Yes it does, because the newInstance() method throws IllegalAccessException if the class or its nullary constructor is not accessible. In this case, because you have an explicit constructor, we cannot access the default constructor.
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 20:43 GMT
#34
To fix it, you need to retrieve the constructor from the Class object and pass in the argument in the Constructor object's newInstance() method


student = ((Class<Student>) ((Class<TAStudent>) ((Class<PhDStudent>) phd.getClass()).getSuperclass()).getSuperclass()).getDeclaredConstructors()[0].newInstance({"1"});
When you want something, all the universe conspires in helping you to achieve it.
Normal
Please log in or register to reply.
Live Events Refresh
Next event in 20m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
SortOf 133
Lowko59
Ryung 9
Rex 2
StarCraft: Brood War
Horang2 2700
Larva 2480
Hyuk 838
firebathero 497
Soma 236
Mini 235
actioN 222
Pusan 198
Leta 159
Soulkey 136
[ Show more ]
Rush 109
Killer 92
Dewaltoss 78
NaDa 74
Sharp 56
Free 52
Hyun 45
HiyA 39
Light 37
[sc1f]eonzerg 24
Hm[arnc] 24
soO 23
EffOrt 20
Noble 17
scan(afreeca) 15
ToSsGirL 15
ajuk12(nOOB) 8
Sacsri 8
Purpose 7
JulyZerg 6
sorry 6
Dota 2
Gorgc3645
Fuzer 107
XcaliburYe65
League of Legends
JimRising 407
Counter-Strike
shoxiejesuss1034
x6flipin255
Other Games
ceh9735
crisheroes204
Pyrionflax197
MindelVK6
Organizations
Dota 2
PGL Dota 2 - Secondary Stream5642
PGL Dota 2 - Main Stream2590
Other Games
gamesdonequick737
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
[ Show 14 non-featured ]
StarCraft 2
• LUISG 39
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• iopq 6
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
League of Legends
• Jankos1948
• Stunt1127
Upcoming Events
WardiTV Weekly
20m
Ryung 9
Rex2
Monday Night Weeklies
5h 20m
Sparkling Tuna Cup
23h 20m
The PondCast
1d 23h
Douyu Cup 2020
2 days
Oliveira vs Trap
Jieshi vs XY
soO vs FanTaSy
TY vs Coffee
Douyu Cup 2020
3 days
Neeb vs Impact
MacSed vs Cyan
Scarlett vs Kelazhur
INnoVation vs Dear
Douyu Cup 2020
4 days
Maestros of the Game
5 days
herO vs Classic
Maru vs Serral
BSL22 NKC (BSL vs China)
5 days
Douyu Cup 2020
5 days
[ Show More ]
BSL22 NKC (BSL vs China)
6 days
Online Event
6 days
RSL Revival
6 days
RSL Revival
6 days
Liquipedia Results

Completed

Acropolis #4
WardiTV Spring 2026
Heroes Pulsing #2

Ongoing

IPSL Spring 2026
CSCL: Masked Kings S4
YSL S3
BSL 22 Non-Korean Championship
CSL Season 21: Qualifier 1
SCTL 2026 Spring
Maestros of the Game 2
Murky Cup 2026
IEM Cologne Major 2026
Stake Ranked Episode 2
CS Asia Championships 2026
Asian Champions League 2026
IEM Atlanta 2026
PGL Astana 2026
BLAST Rivals Spring 2026
IEM Rio 2026
PGL Bucharest 2026

Upcoming

CSL Season 21: Qualifier 2
CSL 2026 Summer (S21)
CSLAN 4
Blizzard Classic Cup 2026
Kung Fu Cup 2026 Grand Finals
RSL Revival: Season 6
CranK Gathers Season 4: BW vs SC2 Team League
HSC XXIX
Douyu Cup 2026
BCC 2026
Light HT
Heroes Pulsing #3
BLAST Open Fall 2026
Esports World Cup 2026
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
XSE Pro League 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.