您的位置:首页 > 编程语言 > Java开发

继承、重载和覆盖的区别

2017-06-19 13:54 148 查看
一、继承

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

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

3、继承的特征

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

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

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

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

二、动态的实现机制

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

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

(1)、方法的重载

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

(2)、方法的覆盖

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

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

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

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

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

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

三、重载

重载是指在一个类中定义了多个同名的方法,它们的参数列表是不相同的(参数的个数、参数类型、参数顺序)
(1)、重载是通过不同的方法参数来区分的;
(2)、不能通过方法的访问权限、返回值类型和抛出的异常类型进行重载;
(3)、如果父类的方法访问权限是private,那么就不能在子类中对其父类进行重载;如果子类中也定义了一个同名的方法,就不是重载,这只是定义了一个新的方法。

四、覆盖

覆盖是指子类函数覆盖其父类函数。覆盖一个方法并对其重写,以达到不同的作用。
(1)、子类中覆盖方法必须和父类中被覆盖的方法中函数名和参数都相同;
(2)、返回值也必须相同;
(3)、所抛出的异常也必须相同;
(4)、父类被覆盖的方法不能为private,否则其子类不是覆盖,而是定义了一个新的方法。

五、覆盖和重载的区别

(1)、覆盖是子类和父类的关系;重载是同一个类中方法之间的关系。
(2)、覆盖只能由一个方法或者一对方法产生关系;重载是多个方法之间的关系;
(3)、覆盖的参数列表是相同的,重载的参数列表必须不同;
(4)、覆盖关系中,调用方法体是根据对象的类型决定的;重载关系是根据调用时的实参表和形参表来选择方法体的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java