方法的重写和重载,接口和抽象类区别
方法的重写和重载,接口和抽象类区别,新手入门必看!!!!!要记住
- 方法的重写和重载
- 重写
- 重载
- 接口和抽象类
- 说明
方法的重写和重载
重写
在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。
子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。
重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。
在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。
这样,就可以实现对父类方法的覆盖。如果子类将父类中的方法重写了,调用的时候肯定是调用被重写过的方法,那么如果现在一定要调用父类中的方法该怎么办呢?
此时,通过使用super关键就可以实现这个功能,super关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.方法名(参数列表)”的形式调用。
如果要使用super关键字不一定非要在方法重写之后使用,也可以明确地表示某个方法是从父类中继承而来的。使用super只是更加明确的说,要从父类中查找,就不在子类查找了。
在重写方法时,需要遵循以下的规则:
(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。…
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。编写过Java程序的人就知道,
父类中的方法并不是在任何情况下都可以重写的,当父类中方法的访问权限修饰符为private时,该方法只能被自己的类访问,
不能被外部的类访问,在子类是不能被重写的。如果定义父类的方法为public,在子类定义为private,程序运行时就会报错。
(四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。
所以如果某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。如果重新定义,也只是定义了一个新的方法,不会达到重写的效果。
(五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,
而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,
或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,
只能抛出IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类中创建了一个成员变量,
而该变量和父类中的一个变量名称相同,称作变量重写或属性覆盖。但是此概念一般很少有人去研究它,因为意义不大。
方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
重载
所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。
在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。
重载是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根据不同的参数列表来选择合适的方法执行
。也就是说,当一个重载方法被调用时,Java用参数的类型或个数来决定实际调用的重载方法。因此,每个重载方法的参数的类型或个数必须是不同。
虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。
当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。在使用重载要注意以下的几点:
1.在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。
2.不能通过访问权限、返回类型、抛出的异常进行重载。
3.方法的异常类型和数目不会对重载造成影响。
4.可以有不同的返回类型,只要参数列表不同就可以了。
5.可以有不同的访问修饰符。
6.可以抛出不同的异常。
接口和抽象类
接口和抽象类都能定义方法和属性。
接口和抽象类都是看作是一种特殊的类。大部分的时候,定义的方法要子类来实现
抽象类和接口都可以不含有抽象方法。接口没有方法就可以作为一个标志。比如可序列化的接口Serializable,没有方法的接口称为空接口。没有抽象方法的抽象类,小编不知道有什么作用,总之是可以通过编译的。
抽象类和接口都不能创建对象。
抽象类和接口都能利用多态性原理来使用抽象类引用指向子类对象。
继承和实现接口或抽象类的子类必须实现接口或抽象类的所有的方法,抽象类若有没有实现的方法就继续作为抽象类,要加abstract修饰。若接口的子类没有实现的方法,也要变为抽象类。
下面是接口和抽象类的不同点:
接口能够多实现,而抽象类只能单独被继承,其本质就是,一个类能继承多个接口,而只能继承一个抽象类。
方法上,抽象类的方法可以用abstract 和public或者protect修饰。而接口默认为public abttact 修饰。
抽象类的方法可以有需要子类实现的抽象方法,也可以有具体的方法。而接口在老版本的jdk中,只能有抽象方法,但是Java8版本的接口中,接口可以带有默认方法。
属性上,抽象类可以用各种各样的修饰符修饰。而接口的属性是默认的public static final
抽象类中可以含有静态代码块和静态方法,而接口不能含有静态方法和静态代码块。
抽象类可以含有构造方法,接口不能含有构造方法。
设计层面上,抽象类表示的是子类“是不是”属于某一类的子类,接口则表示“有没有”特性“能不能”做这种事。如飞机和鸟都能飞,但是他们在设计上实现一个Fly接口,实现fly()方法。远比两个类继承飞行物抽象类好得多。因为,飞机和鸟有太多的属性不一样。
设计层面上,另外一点,抽象类可以是一个模板,因为可以自己带集体方法,所以要加一个实现类都能有的方法,直接在抽象类中写出并实现就好,接口在以前的版本则不行。新版本Java8才有默认方法。
既然说到Java 8 那么就来说明,Java8中的接口中的默认方法是可以被多重继承的。而抽象类不行。
另外,接口只能继承接口。而抽象类可以继承普通的类,也能继承接口和抽象类。
相似:
接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
区别:
抽象类中可以存在非抽象的方法;接口中的方法默认全是抽象方法,不能存在非抽象方法(jdk8中可以带有默认方法)
抽象类里则既可以定义普通成员变量,也可以定义静态常量;接口中只能定义定义静态常量。
抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作;接口不能包含构造器
抽象类里可以包含初始化代码块;接口里不能包含初始化代码块。
实现抽象类的方法时, 如果方法是抽象的,子类必须重写抽象的方法.
如果方法不是抽象的, 子类可以选择继承;实现接口必须实现接口中的所有方法。
一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足。
说明
大家可能看得出来,文章写法的生疏,鄙人是一名普通的专科大一学生,刚新手自学入门,不大懂,望各位高手,不喜勿喷,如有错误的地方,望斧正,能为学弟提一点学习上的建议,蟹蟹大家
最后给大家推荐一个很棒的软件公众号,在这个公众号上可以下载到各种编译器(IDE)只需要将你所需要的IDE名称发出去即可获得下载地址
公众号:rjazgj
方法的重写和重载,接口和抽象类区别相关推荐
- 实现类的多态性,方法的重写和重载
1.多态性是面向对象程序设计的重要部分.在Java语言中,通过使用方法的重载和重写实现类的多态性. 2.重写(覆盖)是指父子类之间的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法 ...
- 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载
<?php /**构造方法__construct析构方法__destruct使用方法 PHP重写与重载*/ //构造方法:当实例化对象时,自动运行的方法 /*class channel{func ...
- java。接口和抽象类区别
接口和抽象类区别 a.抽象类里可以有非抽象方法 接口里只能有抽象方法 b.接口是抽象类的变体,再接口中所有方法都是抽象的 转载于:https://www.cnblogs.com/zhaozhao ...
- java的接口和抽象类区别
转自:深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在 ...
- 接口和抽象类区别以及应用场景
1.接口和抽象类区别: (1)实现:抽象类的子类使用 extends 来继承:接口必须使用 implements 来实现接口. (2)构造函数:抽象类可以有构造函数:接口不能有. (3)实现数量:类可 ...
- C# 继承实现父类方法、重写、重载
继承是派生类(子类)去实现(重写<override>.重构<new>)基类(父类)的方法或属性.从而获取在派生类中要实现的功能. 子类调用父类构造方法,在父类中有个实现姓名和年 ...
- java 多态与重载的区别_java实现多态 方法的重写和重载的区别
1.方法的重写 思路:先写一个父类People,在类中定义一个 print方法 ,然后写一个子类 Student 继承父类,重写print方法. //父类 class People{ public v ...
- 接口与抽象类区别和接口jdk8新特性
jdk8之前特点对比抽象类 1 接口用interface表示,和类是并列的,定义接口就是定义接口的成员 2 接口只能定义公共抽象方法(public abstract)和全局静态最终变量(public ...
- 重写、重载和隐藏的区别
重载:是指同一可访问区内被声明几个具有不同参数列(参数的类型.个数.顺序)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. class A{public:void fun(int t ...
最新文章
- struts2 与 sping 整合 控制器中 service注入的问题
- 6 个理由,让我不顾一切撑腰 Python!
- 常用Apache Commons工具类备忘
- IDE之Eric:Python的IDE之eric的简介、安装、使用方法之详细攻略
- jvm系列(二):JVM内存结构
- Linux C 串口属性设置
- 短信计费(信息学奥赛一本通-T1398)
- 腐烂--发霉--生锈
- endnote style_教你在论文写作中玩转 Endnote
- windows虚拟显示器开发(二)WDDM hook(USB转HDMI驱动、USB手写屏开发)
- RGB图像点落入色度图上的算法
- 夏普S2 android one,夏普S2内部做工怎么样?夏普AQUOS S2拆机评测图解
- 高数第七版_习题解答_极限练习解答(第二类重要极限的多元形式)
- python中x 是什么意思_python中x[::]什么意思
- 用计算机判断函数单调性吗,高中数学函数单调性的判断方法(全)
- JavaScript展示商品详情图
- elasticsearch教你使用搜索引擎
- 谷歌F12看不见请求
- python对mp3格式文件标题专辑封面等信息修改
- 现货白银走势图哪里看?
热门文章
- Apache Tuscany中文论坛开通: http://groups.google.com/group/tuscany-sca-chinese
- 一款mipi转lvds的lcd调试(lt8912b)
- EasyRecovery最新中文Win/Mac全版本下载安装激活数据恢复软件
- PHP排序大数据量分页
- 在你最穷的时候,是怎么翻身的?
- 想提高你的月薪就快收藏下这些网站吧
- ERP的实施--把握三大计划
- nfc卡模式与标准模式_NFC 的通信模式。什么是点对点模式,什么是模拟卡和读卡器模式...
- QPainter使用QImage做画布时花屏
- spring data redis 配置