java中重载和重写的区别

1:重载是指一个类中定义多个方法名相同但参数列表不同的方法,在编译时根据方法参数的个数和类型来决定绑定哪个方法;

  重写是指在子类中定义和父类方法签名完全一样的方法,在程序运行时根据对象的类型不同而调用不同的方法。(注意不是对象的引用)

  看如下代码:

public class Test {

public static void main(String args[]) {

SuperF obj = new Sub();

Goo goo = new Goo();

goo.g(obj);

}

}

class SuperF{

public void f() {

System.out.println("Super.f()");

}

}

class Sub extends SuperF{

public void f() {

System.out.println("Sub.f()");

}

}

class Goo{

public void g(SuperF obj) {

System.out.println("g(SuperF)");

obj.f();

}

public void g(sub obj) {

System.out.println("g(sub)");

obj.f();

}

}

结果输出:

g(SuperF)

Sub.f()

 

2:重载遵循所谓的“编译期绑定”,即在编译期根据参数变量的类型决定该调用哪个方法。上面代码中obj的类型为SuperF,因此Goo的g(SuperF obj)被调用

  重写遵循所谓的“运行期绑定”,即在运行时根据引用指向的实际对象来决定调用哪个方法。上面代码中obj指向的实际对象为Sub类型,因此会调用Sub重写后的f()方法。

posted @ 2017-11-22 09:38  子非齐  阅读(870)  评论(0)    收藏  举报