韦德国际1946手机版PHP面向对象之抽象类

2019-11-15 21:12 来源:未知

在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 }

 

版权声明:本文由19463331韦德国际发布于韦德国际1946手机版,转载请注明出处:韦德国际1946手机版PHP面向对象之抽象类