问个向上转型的问题,为啥第一段程序可以运行,第二段却不行?
import static mytools.Print.*;//upcasting
class Cycle{
public static void ride(Cycle i){
print("Ride Cycle");
}
}
class Unicycle extends Cycle{
public static void main(String[] args){
Unicycle a=new Unicycle();
ride(a);
}
}
import static mytools.Print.*;//upcasting
class Cycle{
public static void ride(Cycle i){
print("Ride Cycle");
}
}
class Unicycle extends Cycle{
}class CycleTest{
public static void main(String[] args){
Unicycle a=new Unicycle();
ride(a);
}
}

解决方案 »

  1.   

    Unicycle 继承了ride方法,所以可以调用
    CycleTest没有ride方法
      

  2.   

    你调用静态方法的写法有点问题,静态方法应该是类名.方法名,你的写法是调用本类中的方法
    你的第一段程序可以运行是因为Unicycle继承了ride方法,你调用的是Unicycle自己的ride方法第二段用不了是
    class CycleTest{
        public static void main(String[] args){
            Unicycle a=new Unicycle();
            ride(a);
        }
    }
    这个类里面没有定义ride方法,你要改成
    class CycleTest{
        public static void main(String[] args){
            Unicycle a=new Unicycle();
            Unicycle.ride(a);//或者是Cycle.ride(a)
        }
    }
    这样就可以运行了
      

  3.   

    CycleTest类中没有ride这个方法,编译都不能通过吧
    第一段代码因为你在Unicycle 继承了Cycle,当然能调用ride方法