从变量类型角度分析——重写和重载

来源:互联网 发布:网络上芒果是什么意思 编辑:程序博客网 时间:2024/05/19 16:22

Human man =new Man();

其中Human 是变量man的静态类型,Man是变量man的动态类型

public class Reloading {
static abstract class Human{
}

static class Man extends Human{
}

static class Woman extends Human{
}

public void sayHello(Human guy){
System.out.println("guy");
}
public void sayHello(Man guy){
System.out.println("man");
}
public void sayHello(Woman guy){
System.out.println("woman");
}

public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
Reloading rd = new Reloading();
rd.sayHello(man);
rd.sayHello(woman);

//虚拟机重载的时候使用过变量的静态类型,而不是实际类型作为依据的

//实际类型变化
Human man2 = new Man();
// man2 = new Woman();
//静态类型变化
rd.sayHello((Man)man2);
rd.sayHello((Woman)man2);

}

输出:

guy

guy

man

异常

public class ReWrite {
static abstract class Human{
public abstract void sayHello(Human guy);
}

static class Man extends Human{

@Override
public void sayHello(Human guy) {
System.out.println("man");
}
}

static class Woman extends Human{
@Override
public void sayHello(Human guy) {
System.out.println("woman");
}
}


public static void main(String[] args) {
//重写不是根据静态类型的,而是根据动态类型的
Human man = new Man();
Human woman = new Woman();
man.sayHello(null);//这种情况就能传入null
woman.sayHello(null);
man = new Woman();
man.sayHello(null);
}
}

输出:

man

woman

woman

原创粉丝点击