继承、重载和覆盖的区别

来源:互联网 发布:重庆微信网络推广 编辑:程序博客网 时间:2024/04/30 05:39

一、继承

1、继承:子类可以使用父类中的一些成员变量与方法。

2、继承是通过extends关键字实现的,格式为:class子类名extends父类名。

3、继承的特征

(1)java语言不支持多重继承,子类最多继承一个父类,可以通过实现多个接口间接的达到多重继承的目的。

(2)、子类只能继承父类的非私有(publicprotected)成员变量和方法。

(3)、子类中定义的成员变量和父类中定义的成员变量名相同时,则子类的成员变量会覆盖父类的成员变量,不是继承。

(4)、子类中的方法和父类中的方法有相同的函数签名(相同的方法名、相同的参数数列表和类型),这也是子类覆盖父类的方法,不是继承。

 二、动态的实现机制

1、多态表示同一个操作作用在不同对象时,会有不同的含有,会产生不同的结果。

2、多态主要变现为两种方式:

   1)、方法的重载

        重载是指同一个类中有很多个同名方法,但这些方法的参数列表是不相同的,因此编译时就可以确定调用哪个方法,这是一种编译时的多态。

   2)、方法的覆盖

        子类覆盖父类的方法,同样的方法会在父类和子类中有着不同的表现形式。

        java中,父类的引用变量不仅可以指向父类的实例对象,也可以指向其子类的实例对象。接口的引用变量也可以指向其实现类的实例对象。

        成员变量是无法实现多态的,成员变量的取值父类还是子类并取决于创建对象的类型,而是取决于所定义的变量类型。

   (3)java中提供了两种多态的机制:

    1)、编译时多态;由方法的重载可以实现。

    2)、运行时多态;由方法的覆盖可以实现。

三、重载

重载是指在一个类中定义了多个同名的方法,它们的参数列表是不相同的(参数的个数、参数类型、参数顺序)

(1)、重载是通过不同的方法参数来区分的;

(2)、不能通过方法的访问权限、返回值类型和抛出的异常类型进行重载;

(3)、如果父类的方法访问权限是private,那么就不能在子类中对其父类进行重载;如果子类中也定义了一个同名的方法,就不是重载,这只是定义了一个新的方法。

四、覆盖

覆盖是指子类函数覆盖其父类函数。覆盖一个方法并对其重写,以达到不同的作用。

(1)、子类中覆盖方法必须和父类中被覆盖的方法中函数名和参数都相同;

(2)、返回值也必须相同;

(3)、所抛出的异常也必须相同;

(4)、父类被覆盖的方法不能为private,否则其子类不是覆盖,而是定义了一个新的方法。

五、覆盖和重载的区别

(1)、覆盖是子类和父类的关系;重载是同一个类中方法之间的关系。

(2)、覆盖只能由一个方法或者一对方法产生关系;重载是多个方法之间的关系;

(3)、覆盖的参数列表是相同的,重载的参数列表必须不同;

(4)、覆盖关系中,调用方法体是根据对象的类型决定的;重载关系是根据调用时的实参表和形参表来选择方法体的。

 

原创粉丝点击