Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Cannot cast" Subclass to Superclass [closed]

public class MyListFragment extends ListFragment {...}

ListFragment listFragment = new MyListFragment();
ListFragment listFragment = (ListFragment) new MyListFragment();

Both lines don't compile with "Cannot cast from MyListFragment to ListFragment".

like image 998
Monstieur Avatar asked Oct 23 '25 16:10

Monstieur


2 Answers

What you are trying to do is definitely valid, so there must be something outside the code you describe which is causing the problem. The following code compiles.

class A {

}

class B extends A {

}

private void test() {
    B b = new B();
    A a = b;
    A a2 = (A)b;
    A a3 = new B();
    A a4 = (A)new B();
}

Most likely you have a bad import, two classes with the same name and you have imported one from the wrong package.

like image 84
Tim B Avatar answered Oct 25 '25 05:10

Tim B


Both are valid

ListFragment listFragment = (ListFragment) new MyListFragment();


ListFragment listFragment =new MyListFragment();

As far as OOPS is concerned check this example.

  class SuperClass {}  
  class SubClass extends SuperClass {  
    public static void main(String[] x) {  
      SubClass sub = (SubClass) new SuperClass();      //1. ClassCastException   

       SuperClass sup = (SuperClass) new SubClass();    
       SubClass sub1 = (SubClass) sup;                //2. ok, why?  
   }  
 }  

Because Compiler checks for only type and JVM checks for value.

like image 25
Shoaib Chikate Avatar answered Oct 25 '25 04:10

Shoaib Chikate