// polymorphism/biking/Biking.java
// TIJ4 Chapter Polymorphism, Exercise 1, page 281
/* Create a Cycle class, with subclasses Unicycle, Bicycle and Tricycle.
* Demonstrate that an instance of each type can be upcast to Cycle via a ride()
* method.
*/
package polymorphism.biking;
//import static org.greggordon.tools.Print.*;class Cycle {
private String name = "Cycle";
public static void travel(Cycle c) {
System.out.println("Cycle.ride() " + c);
}
public String toString() {
return this.name;
}
}class Unicycle extends Cycle {
private String name = "Unicycle";
public String toString() {
return this.name;
}
}class Bicycle extends Cycle {
private String name = "Bicycle";
public String toString() {
return this.name;
}}class Tricycle extends Cycle {
private String name = "Tricycle";
public String toString() {
return this.name;
}
}public class Biking {
public static void ride(Cycle c) {
c.travel(c);
} public static void main(String[] args) {
Unicycle u = new Unicycle();
Bicycle b = new Bicycle();
Tricycle t = new Tricycle();
ride(u);
ride(b);
ride(t);
}
}c.travel(c); 这里为什么不写Cycle.travel(c)?搞的我有点晕了

解决方案 »

  1.   

    ride(u);的时候这到底是u.travel(u)还是c.travel(u)??好晕阿
      

  2.   

    c.travel(c); 这里为什么不写Cycle.travel(c)?搞的我有点晕了
    Cycle是父类 而c就有可能是继承Cycle的子类 不完全一样
    ride(u);的时候这到底是u.travel(u)还是c.travel(u)??好晕阿
    u.travel(u) 因为传进来的是u
      

  3.   

    c.travel(c); 这里为什么不写Cycle.travel(c)?搞的我有点晕了
    没看懂啥意思?
    Cycle 是一个类,难道那个 travel是一个静态方法吗?
    c 是 Cycle的实例,当然可以用 c.来调用
      

  4.   

    可是eclipse编译器提示我这么做的
      

  5.   

    编译器提醒你用c.travel(c); 而不能用Cycle.travel(c)吗?我很怀疑,我改成Cycle.travel(c)一样可以运行,travel是Cycle的静态方法,你直接通过类名调用当然可以,你生成一个类的对象再通过对象来调用也行,两种方式而已。ride(u);的时候调用的是c.travel(u)(这里Unicycle对象向上转型为其父类Cycle的对象),执行到Cycle的travel方法的System.out.println时,先输出Cycle.ride(),接着调用Unicycle的toString()方法,输出 Unicycle(如果Unicycle类没有toString()方法,才会调用其父类Cycle的toString()方法,楼主可以试试删除Unicycle类中的toString()方法,输出的就会是Cycle.ride() Cycle了)
      

  6.   

    是编译器提醒我用Cycle.travel(c)。那ride(u);的时候果然是c.travel(u)吗?我真的不大懂,谁明白点的能不能在说说。
      

  7.   

    恩,那ride(u);的时候果然是c.travel(u)吗?能不能具体解释一下,搞死我了