继承、重载和覆盖的区别
来源:互联网 发布:重庆微信网络推广 编辑:程序博客网 时间:2024/04/30 05:39
一、继承
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)、覆盖关系中,调用方法体是根据对象的类型决定的;重载关系是根据调用时的实参表和形参表来选择方法体的。
- 继承、重载和覆盖的区别
- 覆盖和重载的区别
- 重载和覆盖的区别?
- 覆盖和重载的区别
- 重载和覆盖的区别
- 重载和覆盖的区别
- 重载和覆盖的区别
- C++中继承技术引发的问题:重载(overload),覆盖(override)和隐藏(hide)的区别
- C++中继承技术引发的问题:重载(overload),覆盖(override)和隐藏(hide)的区别
- C++学习笔记-----继承体系中函数的重载,覆盖和隐藏的区别
- 重载、覆盖(重写)、多重继承的区别
- 函数重载和函数覆盖的区别
- C++重载、覆盖和隐藏的区别
- 重载,覆盖和隐藏的区别
- C++覆盖、重载和隐藏的区别
- C++多态、重载和覆盖的区别
- Java中重载和覆盖的区别
- 重载、覆盖和隐藏的区别
- struts分页实现
- selenium2+python3自动化2-csdn写博客(邮件发送附件测试报告)
- 仿Uber得动态背景登陆布局
- 触发器详解
- 证书转换方法
- 继承、重载和覆盖的区别
- spring中JavaBean的生命周期
- eclipse里面创建servlet出现错误的解决方法
- @Transactional 用法
- 一个犀利的 HTML 解析器 —— Less.Html
- VM运行虚拟机时弹出找不到一个要链接的有效 peer 进程
- MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用
- Spring Boot Shiro 权限管理
- sql 一对多 子表多条件查询