重写,重载,抽象类,接口,抽象类和接口区别
1.多态之重写,重载
重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。
new,virtual,override
virtual方式:
父类使用virtual关键字修饰方法 public virtual void sleep(){},
子类使用override关键字修饰方法 public override void sleep(){}
特定场合:Person p = new Student()时,p.sleep()调用的时子类方法(非常灵活)
重载:一个类中的方法与另一个方法同名,但是参数个数或参数类型不同,这种方法称之为重载方法。
2.密封修饰符:sealed
类: public sealed class A 该类不能作为父类出现,不能被继承,类中的方法不能定义为virtual方法
方法: public sealed override void aaa(){} sealed修饰方法的时候,通常和override配合使用,表明该方法不能再被重写
3.抽象类
作用:提供一个可供多个子类共享的通用基类定义,它是一个特殊的类继承关系,它可以包含一个抽象方法,所有派生子类必须重写实现
案例:Person类,Student类,Teacher类
a. abstract public class Person类中提供抽象abstract public void eat();
b. 抽象类中的抽象方法无需直接实现;
c. 子类使用override重写实现抽象方法
案例:鲫鱼,鲤鱼,Fish类 抽象类Fish类实现抽象方法 子类重写实现
抽象方法:
使用abstract关键字 public abstract bool Withdraw(…);
抽象方法是必须被派生类覆写的方法。
抽象方法是可以看成是没有实现体的虚方法
如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法
虚方法:
使用virtual关键字 public virtual bool Withdraw(…);
调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。
虚方法可以有实现体 若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法;
一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;
在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。
抽象方法和虚方法的区别:
抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;
虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。
父类中的抽象方法不包含方法体,子类必须重写;
而虚方法必须要有方法体,子类可以不重写
抽象类不能够被直接实例化, 只能通过抽象类实例化它的子类
4.接口
作用:接口可以实现多继承,一个类只能继承一个父类,但可以实现多个接口,接口也是抽象的体现,适合为不相关的类提供通用功能
案例:人Human、鱼Fish、青蛙Frog
a.定义接口及方法 interface ISwim { void swim(); }
b.给不相干的事物提供一个公共的方法,一个约定
c.实现类需要使用:实现接口,并必须实现接口中的方法
d.封装一个接口调用类,专门负责调用接口实现类中的方法(各司其值)
public void runMethod(ISwim iswim) { iswim.swim(); }
Test t = new Test();
ISwim isw;
isw = new Human();
t.runMethod(isw);
总结: 把实现接口的Class类封装成一个组件,那么当我们的用户需要扩充功能的时候,我们只需要在外部做很小的修改就能实现,
根本就用不着改动我们已经封装好的组件
c#中的系统接口, 举例:使用Person对象类型无法直接进行排序(报错),需要添加IComparable<Person>接口实现CompareTo()方法
5.抽象类和接口区别
抽象类: 共性大于个性,共性相同的个体间必然具有相同的属性与行为,相同行为的实现方式具有一定区别(继承,重写)
接口: 个性大于共性,差异较大的个性间具有某些相同的行为,相同行为的实现方式有较大区别。
案例:
接口: Animal接口, Dog类,Cat类,Tortoise类
void active(); //行为方法,描述各种动物的特性
抽象类: 抽象方法active();
转载于:https://www.cnblogs.com/zeng-qh/p/10251426.html
重写,重载,抽象类,接口,抽象类和接口区别相关推荐
- JAVA 重写重载/多态/抽象类/封装/接口/包
重写&重载 重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重载(overloading) 是在一个类里面,方法名 ...
- java 接口 抽象类 继承 重载 重写 多态
4.1 抽象类 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的. 同时,抽象类体现了数据抽象的思想,是实现多态的一种机制.它定义了一组抽象的方法, ...
- Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类
文章目录 Eclipse工具中java项目的工程结构 静态代码块的书写格式 静态代码块,构造代码块,构造方法的优先级 static关键字的特点 封装的概念 private关键字的特点 面向对象思想特点 ...
- 栈内存 ,堆内存区别 C++ 动态内存 == 与equal区别 复合函数奇偶性 三角函数转换公式: 虚函数和纯虚函数: C++ 中的运算符重载 数据封装,数据抽象 C++ 接口(抽象类
目录 栈内存 ,堆内存区别 C++ 动态内存 == 与equal区别 复合函数奇偶性 三角函数转换公式: 虚函数和纯虚函数: C++ 中的运算符重载 数据封装,数据抽象 C++ 接口(抽象类): #和 ...
- JavaSE面向对象:继承、多态、Super、Object类、重写、static、final、静态成员、懒汉式、饿汉式、单例设计模式、初始化块、抽象类、抽象方法、接口
感谢尚硅谷免费提供的视频 继承 ** 理解 ** 生活中的继承:子女继承了父母的财产或相貌或才华 java中的继承:一个类不用自己定义属性或方法,就已经具备了另一个类的属性和方法 把这种现象称为jav ...
- Java学习(9)(3种向上转型的方式、重写、向下转型、多态的优缺点、抽象类【基础规则、抽象类的作用】接口【基础规则、 接口的使用】)
接上次博客:JAVA学习(8)继承 ( 继承的注意事项.Java的执行顺序.继承方式.限定词protcted.final关键词.多态.动态绑定和静态绑定 )_di-Dora的博客-CSDN博客 目录 ...
- Java11-day02【多态(成员访问、多态转型、内存图解)、抽象类(成员特点)、接口(成员特点)、类和接口的关系、抽象类和接口的区别、综合案例】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
- comparable接口和comparator接口的作用和区别?_接口和抽象类有什么联系和区别?
春风如贵客,一到便繁华.各位看官点赞再看,养成好习惯(●´∀`●)之后还会推出JAVA面试系列文章,敬请关注!按照技术模块:Java热点技术.多线程.微服务.JVM.Redis.消息队列.SQL相关的 ...
- 接口和抽象类有什么联系和区别?
小故事: 父子俩牵着驴进城,半路上有人笑他们:真笨,有驴子不骑! 父亲便叫儿子骑上驴,走了不久,又有人说:真是不孝的儿子,竟然让自己的父亲走着!父亲赶快叫儿子下来,自己骑到驴背上,又有人说:真是狠心的 ...
最新文章
- Javascript 移动的海绵宝宝
- 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析 检测点2.3
- HDU 1506 Largest Rectangle in a Histogram
- 基于Android的浮动组件,可以用于应用中的新功能展示等等。
- 设计模式--命令(Command)模式
- 使用Leopard Jdbc
- GC算法-增量式垃圾回收
- nginx基础概念(100%)之pipe
- pythonwin下载中文版_Python官方下载 v3.9.0中文版_Win10镜像官网
- 一些集合方面的符号与名词总结
- db4o java_DB4O 社区版 8.1.3 发布,面向对象数据库
- (php毕业设计)基于php旅游信息网站管理系统源码
- tcpreplay发包工具的简单介绍
- 【实战经验总结】如何撰写标书
- 关于计算机取代学校的英语作文,关于网络教室将取代传统的教室英语作文
- [渝粤教育] 中国地质大学 工业卫生技术 复习题
- 论文笔记:基于特征选择与增量学习的非侵入式电动自行车充电辨识方法
- 宽带连接已断开 | 宽带拨号上网、连上几分之后自动断开|宽带连上一会儿就断
- 华为OD机试 - 无向图染色
- Java 第5天 经典算法之冒泡排序