X-Received: by 10.43.44.136 with SMTP id ug8mr1651153icb.17.1389293314885; Thu, 09 Jan 2014 10:48:34 -0800 (PST) X-Received: by 10.49.27.168 with SMTP id u8mr10926qeg.25.1389293314689; Thu, 09 Jan 2014 10:48:34 -0800 (PST) Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!peer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!news-out.readnews.com!news-xxxfer.readnews.com!209.85.216.87.MISMATCH!p15no5127222qaj.0!news-out.google.com!fv6ni1437qab.1!nntp.google.com!p15no5127215qaj.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.java.programmer Date: Thu, 9 Jan 2014 10:48:34 -0800 (PST) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=77.251.156.172; posting-account=tRhYkQoAAAC4mfP99Qw2QppE0qHeI37Z NNTP-Posting-Host: 77.251.156.172 User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <5dfabbeb-9201-488d-b56b-e1cef3913c92@googlegroups.com> Subject: question about casting and inheritance From: marc.at.compass@gmail.com Injection-Date: Thu, 09 Jan 2014 18:48:34 +0000 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Received-Bytes: 2625 X-Received-Body-CRC: 4046410031 Xref: csiph.com comp.lang.java.programmer:27262 Hello, I'm preparing for Java 7 OCA exam. I have a q about casting.. I learned you can cast a variable of a class to another object only if ther= e's a hierarchical relation between the variable's class _and_ the object's= class you cast to. And also, the varibla should point to an object og the = class you're casting to or you get a ClassCastException during runtime. So I made up this example: class A { String uniqueMethodForA(){ return ("uniqueMethodForA"); } } class B extends A {=20 String uniqueMethodForB(){ return ("uniqueMethodForB"); } } public class LearnJava{ public static void main(String[] args) throws Exception { LearnJava LJ =3D new LearnJava(); A a =3D new A(); B b =3D new B(); System.out.println(a.uniqueMethodForA()); System.out.println(b.uniqueMethodForB()); a=3Db; b=3D(B)a; System.out.println("=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D"); System.out.println(a.uniqueMethodForA()); System.out.println(b.uniqueMethodForB()); } } outputs: uniqueMethodForA uniqueMethodForB =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D uniqueMethodForA uniqueMethodForB As you see variable a points to an instance of A and not to (an instance of= ) B. I effectively say "treat a as if it is b". I can even call a method on= b that is unique for B. But a didn't point to an instance of B in the firs= t place at all! Why is it the line b=3D(B)a; doesn't give me a ClassCastException during ru= ntime?