Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
JavaRanch.com/granny.jsp
The moose likes Beginning Java and the fly likes casting Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "casting" Watch "casting" New topic
Author

casting

Charlie Swanson
Ranch Hand

Joined: Jan 29, 2001
Posts: 213
Could anyone explain why the below code results in an error:
File: junktest.java
class junktest {
public static void main(String args []) {
junk j1 = new junk();
junksub js;
System.out.print("inside junktest");
js = (junksub)j1;
}
}
File: junk.java
class junk {
public static void main(String args []) {
System.out.println("This is junk");
}
}
File: junksub.java
class junksub extends junk {
public static void main(String args []) {
System.out.println("This is junksub");
}
}
Thank you in advance!
Kathy Lynch
Greenhorn

Joined: Feb 26, 2001
Posts: 25
For starters, main is not a method that you put into all classes you create. I would remove it from class junk and junksub altogether.
Then, you can't make class junk a junksub. All instances of junksub are junk, but not all instances of junk are junksub. Does that make sense?
ryan burgdorfer
Ranch Hand

Joined: Jan 24, 2001
Posts: 219
That's right, you can upcast no problem, but not downcast (class-wise). Also, I beleive that whatever class you decide to keep your one main() method in has to be declared as public.
Someone correct me if I am wrong.
------------------
  • Ryan Burgdorfer
  • Java Acolyte in
  • Columbus, OH USA


<UL TYPE=SQUARE><I><LI>Ryan Burgdorfer<BR><LI>Java Acolyte</I></UL>
Mike Curwen
Ranch Hand

Joined: Feb 20, 2001
Posts: 3695

They can't be protected or private, but they don't need to be explicitly public either.

This works, so the default (or package) access is allowed as well as public.
Charlie Swanson
Ranch Hand

Joined: Jan 29, 2001
Posts: 213
I still do not understand why am I getting an error when I do an explicit cast down.
Eventhough I have the main declared in each class it is not causing the casting error.
Thank you,
Jyotsna Clarkin
Ranch Hand

Joined: Jan 26, 2001
Posts: 158
Charlie:
You cannot force an object of junk()to be an object of junksub() even with an explicit cast.
For example:
Create a class Animal
Create class Dog extends Animal
You cannot forcibly make any Animal a Dog by explicit casting
But a Dog is naturally an Animal (defined in the class hierarchy)
I rewrote your code using the example



Please use code tags when you post code http://www.javaranch.com/ubb/ubbcode.html
regards,
Jyotsna
Charlie Swanson
Ranch Hand

Joined: Jan 29, 2001
Posts: 213
Hello,
I am confused on this.
From my books, I know that an explicit cast is required when going from a superclass to a subclass. Can anyone explain how or when this can be done?
ryan burgdorfer
Ranch Hand

Joined: Jan 24, 2001
Posts: 219
It can be done only when the reference you are casting actually IS an object of the subclass type. No other case will work.
------------------
  • Ryan Burgdorfer
  • Java Acolyte in
  • Columbus, OH USA
Kathy Lynch
Greenhorn

Joined: Feb 26, 2001
Posts: 25
I suggest that you read "How my dog learned Polymorphism" in the Campfire section of the JavaRanch. It discusses these concepts really well (at least it really helped me).

[This message has been edited by Kathy Lynch (edited April 06, 2001).]
Charlie Swanson
Ranch Hand

Joined: Jan 29, 2001
Posts: 213
Thank you very much for the explanations.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
 
subject: casting
 
Similar Threads
How create URL object with GET parameters?
Doubt in join().....
Object Comparison
Doubt in join().....
Doubt on Threads