• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 19:09
CEST 01:09
KST 08:09
  • 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: 5287 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 51m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
CosmosSc2 35
StarCraft: Brood War
Artosis 306
ajuk12(nOOB) 13
Dota 2
Dendi2439
XaKoH 455
monkeys_forever212
canceldota128
League of Legends
Doublelift4560
Counter-Strike
summit1g6606
minikerr52
Super Smash Bros
PPMD98
Other Games
gofns15369
Grubby2897
Liquid`RaSZi1762
shahzam444
hungrybox316
C9.Mang0240
hiko229
White-Ra118
NeuroSwarm87
Day[9].tv82
Mew2King66
Trikslyr48
ViBE43
JuggernautJason25
Organizations
Other Games
BasetradeTV257
[ Show 12 non-featured ]
StarCraft 2
• intothetv
• AfreecaTV YouTube
• Kozan
• IndyKCrew
• Migwel
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Other Games
• Scarra735
• imaqtpie723
• Shiphtur264
• Day9tv82
Upcoming Events
Replay Cast
51m
Escore
10h 51m
PiG Sty Festival
12h 51m
Serral vs Reynor
HeRoMaRinE vs herO
Big Brain Bouts
16h 51m
MaNa vs Kelazhur
Nicoract vs HeRoMaRinE
Serral vs Cure
CranKy Ducklings
1d 10h
PiG Sty Festival
1d 12h
Zoun vs Solar
SHIN vs Maru
Patches Events
1d 16h
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.