在oop语言中,三个类能够有二个或三个子类,而各种类都有二个国有方法做为外部代码访谈其的接口。而肤浅方法就是为着便利承袭而引进的。

抽象类概述:抽象指代不具体的东西,例如:动物是不现实的,它不是猫亦不是狗,而猫狗都以动物,所以简单的说,抽象类正是某种事物的总体描述(猫和狗都以动物,这里的动物就是大器晚成体化描述,所以大家得以将动物定义为一个抽象类)

抽象类:
抽象类,只为继承而现身,不定义具体的剧情,只规定该有如何东西;
貌似抽象类中只放置抽象方法,

多态:
龙生九子,各有分裂

左右2个为啥?
如何是空虚方法?
在类里面定义的从未有过方法体的不二等秘书技便是架空方法,所谓的远非艺术体指的是,在格局声明的时候从相当小括号以至中间的剧情。而是平昔在章程名后加八个分部甘休就可以。别的在宣称抽象方法时还要加一个生死攸关词
abstract来修饰。
怎么着是抽象类?
只要三个类里面有贰个主意是空虚方法,那么那几个类将在定义为抽象类,抽象类也要利用首要词修饰(abstract)

抽象类的性状:

 

相近都以继续了同多个父类,可是父类中的方法并不利用其余三个子类,那么在此就需求子类重新编写这一个主意的基点

纪事一点:只要有三个方法是虚幻的章程,这么些类就亟须评释为抽象类。

    a.抽象类恐怕措施运用abstract关键字来修饰

1、关键字 abstract
2、抽象类能够包括抽象方法和日常方法
3、abstract关键字能够把措施成为抽象方法,抽象方法能够没有函数体
4、抽象类无法被实例化,抽象类首要做为一个基类,让别的类承继。5、abstract关键字和sealed关键字(禁绝继续)无法何况现身
6、借使二个子类承接自抽象类,那么子类中必须达成全数的悬空方法
7、借使子类中未有兑现父类的空洞方法,那么该子类必得是抽象类
8、如果五个类里面包蕴抽象方法,那么该类一定是抽象类

1、须要父类同意子类能够再度编辑自个儿的方法
virtual – 虚方法

abstract class demo{
 public $name;
 abstruct function CheckUser();
 abstruct function CheckPassword();
}

    b.四个类中生龙活虎经有抽象方法,那么类必得定义为架空的

 

2、子类只可以重写父类允许重写的办法,只可以重写虚方法
override – 重写覆盖虚方法

  

    c.抽象类不可能被实例化(无法创制对象)

 

全数的类都得以看做父类,都足以有虚方法

介意:抽象类不可能发出实例对象,所以不能直接使用。
    
抽象方法是做为子类重载的模板使用的,定义抽象类也正是概念了生机勃勃种规范,这种专门的学问须要子类去信守,子类传承抽象类后,把抽象类里边的悬空方法漫天都贯彻,不然子类中还留存抽象方法,那么子类依旧抽象类,依旧无法实例化类

    d.抽象类能够被一而再再而三通过子类创造对象,但供给贯彻当中的空洞方法

接口:
可是抽象的类。


空泛方法是为着子类传承使用,定义抽象类也正是概念了风姿洒脱种标准,这种专门的学业子类必需严峻试行,子类承继抽象类之后,把抽象类里边的架空方法漫天完毕,一个都不可能少。只有全体书写完,技术实例化。

    格式: abstract class 类名{}

接口与抽象类的区分:
1、写法分别
关键字:interface
没有class关键字
写法 interface 类名{} 类名准则:一本用I最早
毫不写public,因为接口自个儿就是public,不用写abstract
因为接口里面装有的都以空虚的

抽象类:abstract
它正是为着被接续而产出的

留意:抽象方法未有重视(未有大括号)

2、接口里面无法饱含普通成员
3、凡是承接继口的类,全体要促成接口里面包车型大巴章程

日常来说的类中有着的点子都成为虚方法,未有人用最基础的主意,全体都急需重写,那么就无需那么困难把普通类中的方法主体都写完,而是,直接定义成抽象类,何况都写成肤浅方法。

格式如下:

 

只评释方法的称呼和重回类型,具体方法主体是怎么着,承继过去年今年后自身去贯彻。

public abstract void 方法名();

接口的功效:

泛泛方法自然是在抽象类中
有抽象方法的类,一定是抽象类

比较普通方法

能够将前后相继拆分成八个模块,方便多个人付出。

抽象类中不鲜明唯有空虚方法

public void 方法名(){}

概念了子类了子类必须带有的功力

 

结论:抽象方法没有重视,使用abstract修饰

接口内尚未函数体,只是规定亟待张开什么样操作,可是没有实际的兑现格局,有子函数自身定义使用。

接口:interface
尽管让类越发周全

 

干爹

//类库
多少时候我们要求用到旁人写的类

都以虚幻方法,无法有几许事实上东西,全体内容都要求在子类中进行贯彻

1、假若此类是源代码类 .cs文件
起十分文件获得花色中,能够接收增多新建项或选拔现存项
援用相应的命名空间

2、固然此类不是源码,而是编写翻译后的 .dll文件(编写翻译后的类库)
将文件得到花色中,增加援用–浏览–找到.dll文件
引进相应的命名空间

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 抽象类
 8 {
 9     //定义抽象类
10     public abstract class DongWu
11     {
12         public void Run()
13         { 
14         }
15         public abstract void Eat();//抽象方法可以没有函数体
16        
17  
18     }
19 
20     public class Ren : DongWu
21     {
22         public override void Eat()
23         {
24             Console.WriteLine("吃熟食");
25         }
26  
27     }
28 
29     //定义接口
30     interface IUSB
31     {
32         //开始读取USB
33         void Start();
34 
35         //关闭USB
36         void Stop();
37  
38     }
39 
40     //做一个鼠标的类来实现USB接口
41     class ShuBiao:IUSB
42     {
43         public void Start()
44         {
45             Console.WriteLine("鼠标启动了");
46         }
47         public void Stop()
48         {
49             Console.WriteLine("鼠标停止了");
50         }
51     
52     }
53 
54 
55     class Program
56     {
57         static void Main(string[] args)
58         {
59             //DongWu dw = new DongWu();--错误,抽象类无法被实例化
60             Ren  r=new Ren();
61             r.Eat();
62             Console.ReadLine();
63             
64         }
65     }
66 
67 
68 
69 
70 
71 }

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图