我看的书上是这样写的:
    对于引用变量,当一个类需要被塑型成更一般的类(父类)或接口时,系统会进行自动塑型。
    例如下面的操作是合法的(student1是Student的子类),即可以将student1类型的对象直接赋给Student类的引用变量,系统会进行自动塑型,将此student1对象塑型为Student类。
    Student s;
    s=new student1();另一段是这样的:
   Student s;
   s= new student1();     
   s.Run();             
   s= new student2();
   s.Run();
   s= new student3();
   s.Run();
按照继承关系,student1,student2,student3属于Student的一种。系统会自动执行类型转换。当调用方法Run时,实际调用的是子类的Run方法。我的问题是:
    书上说的“自动执行类型转换”如果是按照开头写的那样转换为父类,
    那么父类对象s如何调用子类的Run方法?
    

解决方案 »

  1.   

    为了避免歧义
    我的问题最后一句改为
    书上的“当调用方法Run时,实际调用的是子类的Run方法。”是如何实现的?
      

  2.   

    s= new student1(); 
    s= new student2();
    s= new student3();如上,当你实例父类对象的时候,其实已经给它框定了是哪个子类的对象。如果在实例化对象时,没有指定子类的类型给该对象,则会执行父类的Run方法
      

  3.   

    我也是新手,不知道这样说对不对。
    建议你去看下多态
    当父类引用指向子类对象;
       子类有对父类方法的重写;
        就可以实现,这是java挺牛的一个功能。
      

  4.   

    子类中重写了父类的run方法   多态  父类的引用指向子类的对象  调用子类重写后的
      

  5.   

    理解下面这段代码就可以了:
    package org.lxh.zhuanxingdemo;class FuLei {
    public void fun1() {
    System.out.println("父类中的fun1方法");
    }
    }class ZiLei extends FuLei {
    public void fun2() {
    System.out.println("子类中的fun2方法");
    }
    }public class ZhuanXingDemo01 {
    public static void main(String args[]) {
    // FuLei fulei = new ZiLei();
    // fulei.fun1(); FuLei fulei = new ZiLei();// 向上转型(自动)
    ZiLei zilei = (ZiLei) fulei;// 向下转型(强制)
    zilei.fun1();
    zilei.fun2(); }}
    // 同时发生强制向下转型的前提是先向上转型来建立关系
    // 如果上面代码改为
    // FuLei fulei = new FuLei();
    // ZiLei zilei = (ZiLei) fulei;则为错误的因为你没有先进行向上转型来建立关系