重载与重写的区别

重载与重写是完全不同的语法现象,区别如下所示:

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

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

class Super {
public void f() {
System.out.println ("super.f()");
    }
}
class Sub extends Super {
public void f() {
System.out.println ("sub.f()");
    }
}
class Goo {
public void g(Super obj) {
System.out.println ("g(Super)"); 
obj.f();
    }
public void g(Sub obj) {
System.out.println ("g(Sub) ");
obj.f();
    }
}
class Test{
    public static void main(String[] args){
        Super obj = new Sub();
Goo goo = new Goo();
goo.g(obj);
}
}

分析如上代码,输出结果为:g(Super) sub.f()。

首先,重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型判断应该调用哪个方法, 因为变量obj为Super类型引用, 所以,Goo的g(Super)被调用,先输出g(Super)。

重写遵循所谓“运行期绑定”,即在运行的时候,根据引用变量所指向的实际对象的类型来调用方法,因为obj实际指向的是子类Sub的对象,因此,子类重写后的f方法被调用,即sub.f()。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数重载(Overload): 1.函数名称一样 2.参数类型与参数个数不一样 3.与返回值无关 函数重写(Ove...
    沫晴er阅读 391评论 0 0
  • 重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在...
    飞天_shine阅读 401评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,786评论 18 399
  • 重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不...
    yeying12321阅读 13,085评论 3 5
  • 我是个新手,写能提供一些关于小程序连接websocket的原代或事例吗?谢谢! 官方API写的很详细 https:...
    优莉222阅读 705评论 0 0