java静态方法不能实现多态性

来源:互联网 发布:淘宝装修收费 编辑:程序博客网 时间:2024/06/01 10:40

实验代码

public class Cycle{//向上转型
static void ride(){
System.out.println("Cycle has ride");}
public static void main(String[] args){
Cycle c = new Unicycle();
Cycle y = new Bicycle();
Cycle l = new Tricycle();
Cycle cycle = new Cycle();
c.ride();
y.ride();
l.ride();
cycle.ride();
}
}
class Unicycle extends Cycle{
static void ride(){
System.out.println("Unicycle has ride");}
}
class Bicycle extends Cycle{
static void ride(){
System.out.println("Bicycle has ride");}
}
class Tricycle extends Cycle{
static void ride(){
System.out.println("Tricycle has ride");}
}

运行结果


所有结果都是调用的父类Cycle中的方法

若把所有类中的ride方法改为非静态的

运行结果为


造成这种情况的原因是

static方法在JVM类加载时便存在,先与对象存在于内存中

当子类对象创建时会先创建父类对象(而此时父类中的ride()方法已经存在了)
这时接着创建Child对象前,(ride()方法已存在)

所以调用时调用的是父类中的ride()方法



阅读全文
0 0
原创粉丝点击