个人以为产生多态的情况一般要有的条件有
1.0 要有继承
2.0 子类需重写父类的方法。
在多态的练习一TKJ p150
//父类
public class Cycle {
public void ride(Cycle c) {
System.out.println("this is "+c.getName()+"'s ride");
}
public String getName() {
return name;
}
private String name="cycle";
}
//子类Bicycle
public class Bicycle extends Cycle {
//重写ride方法
public void ride(Bicycle c) {
System.out.println("this is "+c.getName()+"'s bicycle");
}
public String getName() {
return name;
}
private String name="bicycle";
}
//子类Uncycle
public class Unicycle extends Cycle{
public void ride(Unicycle c) {
System.out.println("this is "+c.getName()+"'s ride()");
}
public String getName() {
return name;
}
private String name="unicycle";
}
//测试类
public class CycleTest {
public static void main(String args[]){
Cycle bicycle=new Bicycle();
Cycle unicycle=new Unicycle();
bicycle.ride(unicycle);
unicycle.ride(bicycle);
}
}
多态运行结果:
可以看出多态是后期方法绑定的,也就是在编译时根据传入的参数来绑定方法。
如果存在静态方法在重写的时候还会有多态吗?在上面的三个类中加入静态方法
//cycle的静态方法
public static void staticMethon(Cycle c){
System.out.println("this is Cycle "+ c.getName()+"'s static methon");
}
//bicycle的静态
public static void staticMethon(Bicycle b){
System.out.println("this is Bicycle "+ b.getName()+" ");
}
//Unicycle的静态方法
public static void staticMethon(Unicycle u){
System.out.println("this is Uncycle "+u.getName()+"'s static methon");
}
通过debugger发现,无论在测试类中传入那个类,他都是走的父类的方法但是传入的参数还是为原类。
这里传入的是Bicycle,但是还是只能走父类的方法、
2017.09.28
我已经看不懂上文自己想表达什么了,但是多态和静态方法肯定不是我说的这种,因为静态方法不会有后期绑定的,他不属于对象,只属于某个类。这应该是个超级明显的错误