解决方案 »

  1.   

    因为针对于引用practice而言,虽然它实际指向的是子类对象,但是针对它本身并没有子类的方法
    也就是说你用practice"."的时候,是点不出来practice.show(Char char)方法的,所以就直接当int处理了
      

  2.   

    public class Practice
    {
    public void show(String string)
    {
    System.out.println(string);
    } public void show(char age)  //修改一下这里
    {
    System.out.println("age :" + age);
    } public static void main(String[] args)
    {
    Practice practice = new Homework();
    //practice.show(12345);
    practice.show("shit");
    practice.show('j');
    }
    }class Homework extends Practice
    {
    public void show(char ch)
    {
    System.out.println("character is :" + ch);
    } @Override
    public void show(String string)
    {
    System.out.println("string is : " + string);
    }
    }string is : shit
    character is :j
      

  3.   

    方法签名不同,子类的show(char ch)没有覆盖父类的show(int age),而且char可以自动向上转型为int,show(int age)是可以接受char为参数的
      

  4.   

    多态是个很重要的内容:
    public class Practice
    {
    public void show(String string)
    {
    System.out.println(string);
    } public void show(char age)  //注意这里
    {
    System.out.println("age :" + age);
    } public static void main(String[] args)
    {
    Practice practice = new Homework();
    practice.show(12345);
    practice.show("shit");
    practice.show('j');
    }
    }class Homework extends Practice
    {
    public void show(int ch)  //注意这里
    {
    System.out.println("character is :" + ch);
    } @Override
    public void show(String string)
    {
    System.out.println("string is : " + string);
    }
    }
    如果这样的话,程序出错!原因:
    Practice虽然指向的是子类对象,在main中调用方法时,如果父类没有这个方法(没有int())或父类的方法可以向上转型为子类的方法(如char()),即使子类有同样的方法(如int()),也会出错;
      

  5.   

    在java里面,向上转型是自动进行的,但是向下转型却不是;
    一个类型引用只能引用引用类型自身含有的方法和变量,如果没有重写的话!
      

  6.   

    show(char)在父类中未定义,无法调用到,但是jav会a自动将'j'转成了 int类型,所以调用了父类中的show(int)方法。你可以在子类中定义一个方法 ,定义了父类的类型的对象是访问不到的
      

  7.   

    我是在想,void show(int age)和void show(char ch),他们只是重载,用char类型作为参数的话,最优匹配应该是void show(char ch)。。
      

  8.   

    我是在想,void show(int age)和void show(char ch),他们只是重载,用char类型作为参数的话,最优匹配应该是void show(char ch)。。哈哈,你想的不错!
      

  9.   

    这么说是优先引用类型而不是引用的子类对象。即使子类有最佳匹配(子类的show(char)版本),只要父类中有方法可以处理(父类show(char)版本),还是要优先父类
      

  10.   

    我是在想,void show(int age)和void show(char ch),他们只是重载,用char类型作为参数的话,最优匹配应该是void show(char ch)。。哈哈,你想的不错!貌似父类方法还可以处理,还是要优先父类方法。。引用类型的优先级高于对象类型,是不是啊?
      

  11.   

    我是在想,void show(int age)和void show(char ch),他们只是重载,用char类型作为参数的话,最优匹配应该是void show(char ch)。。哈哈,你想的不错!貌似父类方法还可以处理,还是要优先父类方法。。引用类型的优先级高于对象类型,是不是啊?right.
      

  12.   

    这么说是优先引用类型而不是引用的子类对象。即使子类有最佳匹配(子类的show(char)版本),只要父类中有方法可以处理(父类show(char)版本),还是要优先父类重写覆盖。
      

  13.   

    这么说是优先引用类型而不是引用的子类对象。即使子类有最佳匹配(子类的show(char)版本),只要父类中有方法可以处理(父类show(char)版本),还是要优先父类重写覆盖。覆盖的优先级更高。