class Ja5{
int a,b;
void ap(){
System.out.println(1);
}
void ep(){
System.out.println('a');
System.out.println('b');
}
}
class Ja6 extends Ja5{
void ep(){
System.out.println("a+b");
}
}
class Ja7{
public static void main(String []args){
Ja5 jq=new Ja5();
Ja6 jp=new Ja6();
  jp=jq;

}
}
这句jp=jq;报错,看视频是这样的求解。我看的1.4的我用的是1.6的1.6以后的这样写就不行了吗?

解决方案 »

  1.   

    行。jp=(Ja6)jq;
    能编译通过,但运行会出错。你像你爸爸,不会说你爸爸像你。子类有的方法,父类不一定会有,父类有的方法,子类就会有,所以你说能倒过来转吗
      

  2.   

    class Ja5{
    int a,b;
    void ap(){
    System.out.println(1);
    }
    void ep(){
    System.out.println('a');
    System.out.println('b');
    }
    }
    class Ja6 extends Ja5{
    void ep(){
    System.out.println("a+b");
    }
    }
    public class Ja7{
    public static void main(String []args){
    Ja5 jq=new Ja5();
    Ja6 jp=new Ja6();
    jp = (Ja6) jq;  // 第一个方法
    // jq=jp; 第二个方法
    }
    }
    这是多态问题;父类的引用可以指向子类的引用,举个例子吧,你可是说苹果是水果,但是不能水果就是苹果;
    jq=jp 可以直接把子类的对象赋给父类的对象,因为子类的范围比父类的小
    jp = (Ja6)jq  把父类的引用直接给子类是不正确的,因为一个父类可以有许多子类,但是一个子类只能有一个父类,因此这儿要用强制类型转换,