面向对象基础——抽象

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     }
时间: 2024-10-10 10:18:49

面向对象基础——抽象的相关文章

黑马程序员——Java基础---面向对象之抽象

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流!-------    面向对象之抽象 抽象类(abstract) (1)只抽取了很多类的方法的声明,为了保证不出问题,方法声明用abstract修饰. (2)抽象类的特点 A:一个类如果有了抽象方法,那么这个类必须是抽象类.抽象类里边可以没有抽象方法. B

软件工程——理论、方法与实践 之 面向对象基础

软件工程——理论.方法与实践 之 面向对象基础 面向对象技术是软件工程领域中的重要技术,这种技术比较自然的模拟了人类认识客观世界的方式,是当前计算机软件工程学中的主流方法.面向对象方法认为:客观世界是由对象组成的,任何客观的事物或实体都是对象,复杂的对象可以由简单的对象组成:具有相同数据和相同操作的对象可以归并为一个类,对象是对象类的一个实例:类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特征,子类与父类形成类的层次结构:对象之间通过消息传递相互联系:类具有封装性,其数

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

大话设计模式学习笔记——面向对象基础

前言 好记性不如烂"笔头"系列--大话设计模式学习笔记 目录 面向对象基础 面向对象基础 什么是类与实例 一切事物皆为对象,即所有的东西老师对象,对象就是可以看到.感觉到.听到.触摸到.尝到.或闻到的东西.准确地说,对象是一个自包含的实体,用一组可识别的特性和行为来标识.面向对象编程,英文叫 Object-Oriented Programming,其实就是针对对象来进行编程的意思.类就是具有相同属性和功能的对象的抽象集合.实例就是一个真实的对象.比如我们属于'人'类,而个人就是'人'类

【设计模式】面向对象基础

最近一直在学习<大话设计模式>根据师傅对我的指导,让我先学习这本书的附录--面向对象基础.说实在话,面向对象技术从很早就接触了,从刚开始的C++,其次是软工视频,然后是UML,紧接着是C#,直到现在的设计模式.. 总的来说,在设计模式之前,我对面向对象的了解还只是停留在封装.继承.多态的层次上,虽然在C#视频中,有全面的讲解了一下,但是自己还是晕晕乎乎的,脑子中还是有很多疑云..直到这次的设计模式,通过通过幽默生动.而又通俗易懂的故事,对面向对象技术深入浅出,我才算是真正的入门了.. 这篇博客

附录A培训实习生-面向对象基础(1):类和实例

对象是一个自包含的实体,用一组可识别的特性和行为来标识. 面向对象编程,Object-Oriented Programming,其实就是针对对象进行编程的意思. 类就是具有相同属性和功能的对象的抽象的集合. 在编程过程中注意: 第一,类名称首字母记着要大写.多个单词则各个首字母大写. 第二,对外公开的方法需要用public修饰符. 实例,就是一个真实的对象. 实例化就是创建对象的过程,使用new关键字来创建. 下面是一个例子: 这是一个类, 1 using System; 2 using Sys

面向对象基础知识

面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 面向对象要素 ⑴抽象. 抽象是指强调实体的本质.内在的属性.在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为.使用抽象可以尽可能避免过早考虑一些细节. 类实现了对象的数据(即状态)和

C#面向对象基础01

面向对象不是取代面向过程的类.对象."人"是类,"张三"是人这个类的对象.类是抽象的,对象是具体的.按钮就是类,某个按钮就是对象.对象可以叫做类的实例.类就像int,对象就像10.字段field(和某个对象相关的变量),字段就是类的状态.人这个 类有姓名.年龄.身高等字段.类不占内存,对象才占内存.方法:方法就是累能够执行的动作,比如问好.吃饭等.类的继承,类之间可以有继承关系,比如电脑类可以从"电器"类继承,这样的好处是"电脑&quo

面向对象基础之抽象类与接口 下

在上篇博文中我们一起了解了抽象类,那么什么是接口呢?下面给大家简单介绍一下: 所谓接口,就是把隐式公共方法和属性组合起来,以封装特定功能的一个集合.一旦类实现了接口,类就可以支持接口所指定的所有属性和成员.声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式,因此接口不能实例化,不能有构造方法和字段,不能有修饰符,如public等.在实现接口的类中必须实现接口中的所有方法和属性. 一个接口可以支持多个接口,多个类也可以支持相同的接口.需要注意的是,接口用interface关