c#基础学习(0709)之vs通过抽象方法实现多态
抽象类不能用来实例化对象
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通过抽象方法实现多态的更多相关文章
- python基础学习 Day19 面向对象的三大特性之多态、封装 property的用法(1)
一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...
- python基础学习 Day19 面向对象的三大特性之多态、封装
一.课前内容回顾 继承作用:提高代码的重用性(要继承父类的子类都实现相同的方法:抽象类.接口) 继承解释:当你开始编写两个类的时候,出现了重复的代码,通过继承来简化代码,把重复的代码放在父类中. 单继 ...
- c#基础学习(0706)之使用虚方法实现多态
使用虚方法实现多态 namespace _0706 { class Program { static void Main(string[] args) { //这个时候调用的是父类的方法 Person ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础学习(2)
Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...
- java基础学习笔记五(抽象类)
java基础学习总结——抽象类 抽象类介绍
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
随机推荐
- ASP.Net C#---Excel导入导入后台方法
https://www.cnblogs.com/chendaye/p/10693983.html 这里写了Excel的导入导入方法, 后台我用的是MVC 以及 C#语句用来在后台做接受和输出数据 / ...
- C#判断本地文件,网络文件是否存在是否存在
File.Exists 方法 (String) 确定指定的文件是否存在. 命名空间: System.IO程序集: mscorlib(位于 mscorlib.dll) 参数 path Type: ...
- Restframework 频率throttle组件实例-3
频率逻辑: from rest_framework.throttling import BaseThrottle import time VISIT_RECORD={} class VisitThro ...
- 修改tomcat7编码问题(重定向等)
修改tomcat默认编码格式: 修改tomcat下的conf/server.xml文件,找到如下代码: <Connector port="8080" protocol=&qu ...
- Android - Android Studio 3.0去掉方法参数提示
升级到3.0之后,最明显的一个就是在调用方法的时候多了一个参数提示.有利有弊,看着不是很舒服.就想去掉. 提示样式如下: 去掉提示: 原文地址: https://blog.csdn.net/stude ...
- 887. Super Egg Drop
You are given K eggs, and you have access to a building with N floors from 1 to N. Each egg is ident ...
- Xcode的多种Build Configuration
一: 建多个Configuration的目的. 多套域名打包. 1 开发时的域名. 2 内测时的域名. 3 公测时的域名. 4 企业版的域名. 5 APP Store的域名. 通过注释的方式,容易出错 ...
- MySQL(视图、触发器、函数)
day61 参考:http://www.cnblogs.com/wupeiqi/articles/5713323.html 视图 视图:给某个查询语句设置别名,日后方便使用 ...
- ACTIVEMQ监控项目admin队列详情中文乱码
一.使用ACTIVEMQ队列,传入ObjectMessage时,监控项目admin无法解析消息信息,需要将消息javabean打成jar放入lib文件夹中,重启ACTIVEMQ,注意javabean要 ...
- 如何使不同时区的时间与京8区一致?(JS实现)
如何使不同时区的时间与京8区一致?(JS实现) Update:2019/1/28 更简单的是使用这个函数(toDate): // 自定义日期格式如下(年月日都必须提供): // "2011- ...