• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

class casting

 
maggie karve
Ranch Hand
Posts: 187
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
class A{}
class B extends A implements E{} //line 1
class C extends A{}
class D extends B{}
interface E{}
public class Question07 {
public static void main(String[] args) {
A a = new D(); //line 2
C c = new C(); //line 3
E e = (E)a; //line 4
B b = (B)e; //line 5
}
}



1 The code compiles without error and runs fine
2 Compilation error on line 1 because interface E is not yet declared (forward-referencing)
3 Compilation error on line 4 because class A does not implement interface E
4 The cast on line 4 is mandatory
5 The cast on line 5 is not mandatory


the answer is one.......if anybody has understood kindly explain....Thanks in advance
 
Waclaw Borowiec
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The answer is 1 and 4.
 
Phungsuk Wangdu
Ranch Hand
Posts: 114
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
from where are you getting such interesting questions


well the answer should be 1
after applying is-a relationship you can do it
like B is-a A,E
C is-a A
D is-a B means D is also A,E

and when we perform a cast only the object is used not the reference
 
Neha Daga
Ranch Hand
Posts: 504
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
1 is answer becuse at runtime the object type is taken into consideration not the reference type, so at runtime jvm sees it as object D being casted to E and d implements E through its superclass so no exceptions will be there.
 
Rajiv Chopra
Ranch Hand
Posts: 62
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

At line 4--> we are casting object a with (E). a is actually D (at runtime). So a require casting as class D is subclass of class B which implements interface E.
At line 5 -->we are casting e with B because downcasting is required.

Answer should be 1.
 
Waclaw Borowiec
Greenhorn
Posts: 21
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Neha Daga wrote:1 is answer becuse at runtime the object type is taken into consideration not the reference type, so at runtime jvm sees it as object D being casted to E and d implements E through its superclass so no exceptions will be there.


Answer 4 says that in line 4 the (E)a cast is required. And it is as the code doesn't compile without it (try it yourself). It shouldn't because in Java type safety is checked at compile time. Here we're trying to assign reference of type A to reference of type E. Class A doesn't implement interface E so this assignment requires explicit cast for the compiler. In runtime everything is fine - it's object of type D which is being cast to E, and D implicitly implements E, so no exception. That's why correct answers are 1 and 4.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic