码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象基础——抽象

时间:2015-05-11 19:35:59      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

a)抽象类与抽象方法由abstract修饰

b)abstract的使用注意

抽象方法没有方法体

抽象成员只能存在于抽象类中

抽象类可以有非抽象成员(侧重于族群的概念,父类有的,子类可以调用)

抽象类的派生类必须实现抽象方法体

抽象类可以有构造函数(子类new时会调用父类构造函数初始化)

抽象类只能用作基类,无法实例化

 

抽象类

a)抽象类不能被实例化。

b)抽象类存在的意义:

1.抽象类不能被实例化,只能被其他类继承

2.继承抽象类的子类必须把抽象类中的所有抽象成员都重写(实现)(除非子类也是抽象类。)

3.抽象类就是为了重写→多态。

c)什么是抽象类(光说不做)

    不能被实例化的类(不能new)

d)抽象类的特点

1.需要用abstract关键字标记

2.抽象方法不能有任何方法实现。

3.抽象成员必须包含在抽象类中。

4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。

5.抽象类不能实例化

6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。

7.抽象方法不能用static修饰

8.抽象类中的抽象成员不能使用private访问修饰符,可以使用其他访问修饰符。

e)抽象类的作用:抽象类的作用就是为了让子类继承。

抽象类定义的是公共的实现和能力

抽象类为子类提供所需要的成员

抽象类中的成员既可以有实现也可以无实现

抽象类必须由其子类实现它的抽象成员(除非子类也是抽象类)

一个类只能继承一个抽象类(类的单根继承性)

抽象方法(成员)不能有实现,必须被子类重写override(除非子类也是抽象类)

抽象方法(成员)只能出现在抽象类中。

 

现在,我们再来看多态。

  多态性的含义:使得能够利用基类来操作不同子类的对象,以及根据所操作对象的不同,以不同的方式执行相同的操作。

  多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。建立多态的方式:用父类实现多态;用抽象类实现多态;用接口实现多态。

 

下面的例子中,Shape类为抽象类,它包含了3个抽象方法。它的子类Circle和Square都对这3个抽象方法进行了重写。

  1     //父类:Shape
  2     public abstract class Shape
  3     {   //设置形状的参数
  4         public abstract void SetR();
  5 
  6         //获得形状面积
  7         public abstract double CountArea();
  8 
  9         //获得形状周长
 10         public abstract double CountLength();
 11     }
 12 
 13     //子类:Circle
 14     public class Circle : Shape 
 15     {
 16         double r;
 17         const double PI = 3.14;
 18 
 19         //设置形状的参数
 20         public override void SetR()
 21         {
 22             Console.WriteLine("请输入您的圆形的半径:");
 23             string strR = Console.ReadLine();
 24             r = Convert.ToDouble(strR);
 25         }
 26 
 27         //计算圆的面积
 28         public override double CountArea()
 29         {
 30             return PI * r * r;
 31         }
 32 
 33         //计算圆的周长
 34         public override double CountLength()
 35         {
 36             return 2 * PI * r;
 37         }
 38     }
 39 
 40     //子类:Square
 41     public class Square : Shape
 42     {
 43         double width;
 44         double height;
 45 
 46         // 设置形状的参数
 47         public override void SetR()
 48         {
 49             Console.WriteLine("请输入您的矩形的宽:");
 50             string strWidth = Console.ReadLine();
 51             width = Convert.ToDouble(strWidth);
 52 
 53             Console.WriteLine("请输入您的矩形的高:");
 54             string strHeight = Console.ReadLine();
 55             height = Convert.ToDouble(strHeight);
 56         }
 57 
 58         // 获得面积
 59         public override double CountArea()
 60         {
 61             return width * height;
 62         }
 63 
 64         // 获得周长
 65         public override double CountLength()
 66         {
 67             return 2 * (width + height);
 68         }
 69     }
 70     
 71     //形状计算器:ShapeCol
 72     public class ShapeCol
 73     {
 74         // 获得形状面积
 75         public double GetArea(Shape shape)
 76         {
 77             return shape.CountArea();
 78         }
 79  
 80         // 获得形状周长
 81        public  double GetLength(Shape shape)
 82         {
 83             return shape.CountLength();
 84         }
 85     }
 86 
 87     class Program
 88     {
 89         static void Main(string[] args)
 90         {
 91             ShapeCol shapecol = new ShapeCol();
 92             Shape shape = null;
 93             Console.WriteLine("控制台:请输入您要计算的形状: 1-圆形, 2-矩形");
 94 
 95             string strType = Console.ReadLine();
 96             if (strType == "1")
 97             {
 98                 Console.WriteLine("控制台:确认为1-圆形");
 99                 shape = new Circle();
100             }
101             else if (strType == "2")
102             {
103                 Console.WriteLine("控制台:确认为2-矩形");
104                 shape = new Square();
105             }
106 
107             //根据类型接收用户输入的形状参数
108             shape.SetR();
109             Console.WriteLine("控制台:圆形的面积为 {0}  周长为 {1}", 
110                 shapecol.GetArea(shape), shapecol.GetLength(shape));
111         }
112     }

 

 

 

 

 

 

 

 

面向对象基础——抽象

标签:

原文地址:http://www.cnblogs.com/lcxBlog/p/4495095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!