通常是父类里作虚函数,子类里实现该函数或重写该函数。
先说父类作虚函数,子类作实现的。
一种应用就是,父类描述一种结构,好比要实现数据查询的,父类中的数据处理依赖于一个数据来源,该来源多是本地文件,也多是远程文件,甚至多是被包装在某个文件中的,但均可抽象为一个统一的接口,好比有读取和写入两种操做。这样父类中对数据的读取或写入可作成虚函数。
例父类:
class BaseCls {
//举例方法,该方法是公有的,具体实现代码不写了
public object listAll(){
//方法中会用到Get方法
}
//两个虚方法,须要子类重载
//abstract是C#中虚方法的关键字,php和java我不会
//这两个虚函数是不用实现代码的,仅代表存在这两种操做,具体代码。须要到子类中实现
public abstract object Get(key);
public abstract object Set(key, value);
}
而对应不一样的数据来源,有不一样的子类,子类中实现该数据源的链接,好比操做本地文件的,读取和写入操做被重载为对文件的读写。
例子类1:
class class1 : BaseCls {
//实现方法
public object Get(key){
//对磁盘的操做
}
public object Set(key, value){
//对磁盘的操做
}
}
例子类2:code
class class1 : BaseCls {
//实现方法
public object Get(key){
//经过某种协议对远程文件的操做
}
public object Set(key, value){
//经过某种协议对远程文件的操做
}
}
这样,咱们在使用时,根据须要,建立某个子类的实例后,不光可用Get,Set方法,并且能够调用父类的listAll方法,而父类的listAll会正确地调用子类的Get,对Get返回的结果进行整理等操做。orm
若是是重写,差很少的状况,只不过相比 虚函数/实现 的例子,是父类里已经实现了Get和Set,但若是子类要求用另外一种方式实现Get和Set操做,能够进行重写。
重写的做用一般是将读写操做重定向到别的地方,好比控制台输出,Console.Write(),一般讲是输出到控制台界面,但若是该方法能够被重写,那么咱们能够作一个子类继承自Console,而后重写一下Write方法,输出到咱们但愿的地方,好比文件。以后若是咱们经过咱们作的这个子类实现一个控制台实例,对他的Write,包括创建在Write基础之上的WriteLine(实际就是经过Write实现的),都会写到文件中,而不是控制台界面。
(Console的例子只是举例,实际状况可能不是这样的)对象
说简单一些,父类子类是多态的一种表现形式,一个父类可能是抽象出来一些子类的共性,多个子类继承父类这些共性。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习