接口,虚方法,抽象方法

简介: 接口,虚方法,抽象方法

抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。

重写的子类虚函数就是被覆盖了。


抽象方法


使用abstract关键字 public abstract bool Withdraw(…);


抽象方法是必须被派生类覆写的方法。


抽象方法是可以看成是没有实现体的虚方法


如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法


虚方法


使用virtual关键字 public virtual bool Withdraw(…);


调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。


虚方法可以有实现体 若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法;


一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。


虚函数的限制:


1.虚函数仅适用于有继承关系的类对象, 所以只有类的成员函数才能说明为虚函数.


2.静态成员函数不能是虚函数.


3.内联函数不能是虚函数.


4构造函数不能是虚函数.


5.析构函数可以是虚函数. 简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.


简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求.


虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?


1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。


2. 抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。


3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。


都必须建立在继承关系下才可以使用


区分点: 虚方法: 虚方法是在明确父类下的子类有共通的方法,且还有各自的特性方法下使用


抽象方法:抽象方法是明确父类下的子类没有共通的方法,且不明确如何写,子类有各自的特性方法下使用


接口: 接口是抽象方法下的特性方法,可以添加在抽象子类下作为抽象方法。


相关文章
|
1月前
|
程序员 C++
抽象类与接口
抽象类与接口
27 0
|
6月前
|
Java 编译器 程序员
重写、抽象类、接口
Java编程涉及重载、重写、final、super、抽象类、static和接口。方法重载允许同名方法,但参数列表需不同;方法重写在子类中重新定义父类方法,保持相同签名。final修饰的类不可继承,final方法不可重写。抽象类包含抽象方法,不能实例化,子类必须重写抽象方法。static修饰静态属性和方法,与对象无关。接口是抽象类的极致形式,包含常量和抽象方法,实现接口需重写方法。Java中,接口可多继承,而类单继承。
39 0
|
4月前
|
Java
子类的父类和接口具有共同的方法
子类的父类和接口具有共同的方法
32 7
|
6月前
|
C++
c++接口(抽象类)
c++接口(抽象类)
54 1
|
6月前
|
Java 编译器
抽象类和接口
抽象类和接口
|
6月前
|
Java
22、接口与抽象类、匿名类的介绍
22、接口与抽象类、匿名类的介绍
41 0
C#中抽象方法与虚方法的区别
C#中抽象方法与虚方法的区别
|
Java
第22篇:接口与抽象类、匿名类的介绍
📋 匿名类和局部类一样,都只能访问 final 或有效 final 的局部变量 📋 匿名类可以直接访问外部类中的所有成员(即使被声明为 private) 📋 匿名类只有在实例相关的代码块中使用,才可直接访问外部类中的实例成员 📋 匿名类不能自定义构造方法 📋 匿名类可以有初始化块
150 0
|
程序员 C#
浅谈C#抽象方法、虚方法、接口
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默。我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走...
947 0