抽象类不能用来实例化对象

1、抽象类中可以有实例成员,也可以有抽象成员

2、抽象成员不能有任何实现

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

4、抽象类不能用来实例化对象,既然抽象类不能被实例化,那么抽象类的作用就是用来被继承的,继承的主要目的就是用来实现多态

5、抽象成员子类继承以后必须“重写”,override,除非子类也是个抽象类

namespace 抽象类实现多态案例
{
class Class1
{
static void Main(string[] args)
{
//例子一
Animal animal = new Dog();
animal.Eat();
animal.Bark();
Console.ReadKey(); //例子二
Shape shape = new Rectangle(, );//new Circle(20);
Console.WriteLine("周长:{0}", shape.GetGirth());
Console.WriteLine("面积:{0}",shape.GetArea());
Console.ReadKey();
}
} abstract class Shape
{
public abstract double GetArea();
public abstract double GetGirth();
}
class Circle : Shape
{
public Circle(double r)
{
this.R = r;
}
public double R { get; set; }
public override double GetArea()
{
return Math.PI * this.R * this.R;
}
public override double GetGirth()
{
return * Math.PI * this.R;
}
}
class Rectangle:Shape
{
public Rectangle(double length,double width)
{
this.Length = length;
this.Width = width;
}
public double Length { get; set; }
public double Width { get; set; }
public override double GetArea()
{
return Length * Width;
}
public override double GetGirth()
{
return * (Length + Width);
}
} //======================================== abstract class Animal
{
public abstract void Eat();
public abstract void Bark();
}
class Dog : Animal
{
public override void Eat()
{
Console.WriteLine("狗吃骨头");
}
public override void Bark()
{
Console.WriteLine("汪汪汪");
}
}
class Cat : Animal
{
public override void Eat()
{
Console.WriteLine("毛吃鱼");
}
public override void Bark()
{
Console.WriteLine("喵喵喵");
}
}
}

什么时候使用抽象类

1、是不是需要被实例化

2、父类中有没有默认的实现

如果不需要被实例化,父类中没有默认的实现,则用抽象类,否则用虚方法来实现

c#基础学习(0709)之vs通过抽象方法实现多态的更多相关文章

  1. python基础学习 Day19 面向对象的三大特性之多态、封装 property的用法(1)

    一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...

  2. python基础学习 Day19 面向对象的三大特性之多态、封装

    一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...

  3. c#基础学习(0706)之使用虚方法实现多态

    使用虚方法实现多态 namespace _0706 { class Program { static void Main(string[] args) { //这个时候调用的是父类的方法 Person ...

  4. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  5. Java基础学习(2)

    Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...

  6. java基础学习笔记五(抽象类)

    java基础学习总结——抽象类 抽象类介绍

  7. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  8. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  9. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

随机推荐

  1. 应用于电力电子变压器的双向DC_DC变换器综述(学习笔记)

    PET(Powerelectronictransformer):电力电子变压器 PET所具有的优点: (1)体积小.重量轻.无变压器油的污染: (2)具备功率因数调节能力,减小电网谐波污染: (3)能 ...

  2. Flask基础-基础实例

    1. 10行代码的迷你程序 flask项目 from flask import Flask app = Flask(__name__) @app.route("/index") d ...

  3. Android------------UI的控件学习内容

    1. android:gravity="fill_horizontal"  :  文本在显示框中内容显示的位置 2.ToggleButton :  切换按钮 3.RadioGrou ...

  4. 《Python绝技:运用Python成为顶级黑客》 Python实用小工具

    1.实现简单探测 使用socket模块,connect()方法建立与指定IP和端口的网络连接:revc(1024)方法将读取套接字中接下来的1024B数据 mport socket import sy ...

  5. 《Python绝技:运用Python成为顶级黑客》 用Python进行渗透测试

    1.编写一个端口扫描器 TCP全连接扫描.抓取应用的Banner #!/usr/bin/python #coding=utf-8 import optparse import socket from ...

  6. C++中new申请动态数组

    C++中数组分为静态数组和动态数组,静态数组必须确定数组的大小,不然编译错误:而动态数组大小可以不必固定,用多少申请多少.静态数组类于与我们去餐馆吃饭,餐馆会把菜做好.而动态数组类似于我们自己买菜做饭 ...

  7. iOS开发总结--三方平台开发之微信支付

    1.前言 现在很多应用都有支付功能,支付也是开发中比较麻烦的一个部分.其实,最麻烦的部分是商户帐号的审核,如果没有商户帐号,就没有你要给钱的那个对公账户. 2.关于交易 在这个金融类项目的开发中,接触 ...

  8. Django中指定生成表名的方法

    在模型类中定义元类: class Meta: de_table = 'tableName' #指定表名

  9. Redhead安装VMware Tools

    Redhead安装VMware Tools VMware Tools 是款插件,便于在图形化界面中移动鼠标和复制拖动文件,对于redhead等命令符界面用处不大. 2.挂载光盘安装方法

  10. javascript保存excel

    function saveToExcel() { var cind=1; try { var xls = new ActiveXObject ("Excel.Application" ...