抽象类

来源:互联网 发布:淘宝网店名称 编辑:程序博客网 时间:2024/03/29 18:12

抽象类
在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的

类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但

是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在

着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在

问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以

用以表征抽象概念的抽象类是不能够实例化的。在面向对象领域,抽象类主要用来进行类型隐藏。我们可

以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象

描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体

。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可

扩展此模块的行为功能。
在C#中一种类专门用来作为父类,这种类就是“抽象类”(abstract class)。抽象类有点类似“模板”

的作用,其目的是要依据它的格式来修改并创建新的类。但是并不能由抽象类创建对象,只能通过抽象类

派生出新的类,再由它来创建对象。抽象类的定义语法中,method的定义可分为两种:一种是一般的

method,它和普通类的方法没什么区别。另一种是"抽象方法"(abstract method)。它是以abstract关键

字为开头的method,此method只声明了返回值的数据类型、method名称与所需的参数,但没有定义处理的

方式。
使用抽象类时注意
不能实例化
abstract关键字
子类必须重写
抽象类不能是sealed密封类。
若一个类中有一个抽象方法,那此类必须定义成抽象类。
抽象成员的访问修饰符不能为private。
实现抽象方法用override关键字。
抽象类可以被抽象类所继承,结果仍是抽象类。 

 

abstract class VehicleBuilder
    
{

        
abstract public void BuildFrame();
        
abstract public void BuildEngine();
        
abstract public void BuildWheels();
        
abstract public void BuildDoors();
        
public void show()
        
{
            BuildFrame();
            BuildEngine();
            BuildWheels();
            BuildDoors();

        }

    }

class MotorCycleBuilder : VehicleBuilder
    
{

        
override public void BuildFrame()
        
{

            Console.WriteLine(
"MotorCycleBuildFrame");
        }


        
override public void BuildEngine()
        
{
            Console.WriteLine(
"MotorCycleBuildEngine");
        }


        
override public void BuildWheels()
        
{
            Console.WriteLine(
"MotorCycleBuildWheels");
        }


        
override public void BuildDoors()
        
{
            Console.WriteLine(
"MotorCycleBuildDoors");
        }

        
    }

 
class ScooterBuilder : VehicleBuilder
    
{

        
override public void BuildFrame()
        
{

            vehicle[
"frame"= "Scooter Frame";
        }


        
override public void BuildEngine()
        
{
            vehicle[
"engine"= "none";
        }


        
override public void BuildWheels()
        
{
            vehicle[
"wheels"= "2";
        }


        
override public void BuildDoors()
        
{
            vehicle[
"doors"= "0";
        }

    }
原创粉丝点击