/**
  特性:
    单根性:一个子类只能有一个父类
    传递性:爷爷类 爹类 儿子类
  里氏转换
    1、子类可以赋值给父类
    2、如果父类装的是子类对象,则可以将这个父类转换为对应的子类 is as 关键字
    -->关键字
      1、is:返回bool类型,指示是否是这个类型
      2、as:如果转换成功返回对象,否则返回null
    作用:我们可以将所有的子类当做是父类来看,针对父类进行编程,写出通用代
    码,适应需求的不断改变
  多态:
    -->虚方法
      virtual override
    -->抽象类
      abstract override
    -->接口
      interface

*/

普通类的继承

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; /**
继承中的非多态方式,很恶心人吧
虚方法和抽象方法就是为了解决这个问题的
*/
namespace 普通类的继承 {
class Program {
static void Main(string[] args) {
passen[] pas = { new Liuguan(), new Wangming() };
foreach(passen item in pas) {
if(item is Liuguan) {
(item as Liuguan).Function();
}
if(item is Wangming) {
(item as Wangming).Function();
}
//item.Function();该方式,打印出来都是"我是人"
}
Console.ReadLine();
}
}
class passen {
public void Function() {
Console.WriteLine("我是人");
}
}
class Liuguan : passen {
public new void Function() {
Console.WriteLine("我是刘冠");
}
}
class Wangming : passen {
public new void Function() {
Console.WriteLine("我是王明");
}
}
}

抽象类的继承

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 抽象类的继承 {
class Program {
static void Main(string[] args) {
//多态,父类可指向子类对象
//子类可以赋值给父类,但调不出子类新增方法,反之不可
animal[] ani = { new Cat(), new Dog(), new Pig() };
foreach(animal item in ani) {
item.Bark();
if(item is Cat) {//判断类型
Cat tempItem = (Cat)item;
tempItem.TextFunction();
//两个等价
Cat tempItem2 = item as Cat;
tempItem2.TextFunction();
}
} Console.ReadLine();
}
}
//抽象类,抽象方法
abstract class animal {
public abstract void Bark();//抽象方法包含于抽象类中类,应用场景:父类没有办法如何确定子类如何去实现 }
//一个子类继承了一个抽象类,那么这个子类必须重写这个抽象父类中的所有成员
class Cat : animal {
public override void Bark() {//子类重写父类方法
Console.WriteLine("cat");
}
public void TextFunction() {
Console.WriteLine("测试方法");
}
}
class Dog : animal {
public override void Bark() {//子类重写父类方法
Console.WriteLine("dog");
}
public void TextFunction() {
Console.WriteLine("测试方法");
}
}
class Pig : animal {
public override void Bark() {//子类重写父类方法
Console.WriteLine("pig");
}
public void TextFunction() {
Console.WriteLine("测试方法");
}
}
}

虚方法类的继承

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 虚方法类的继承 {
class Program {
static void Main(string[] args) {
person[] per = { new Liuguan(), new Wangming() };
foreach(person item in per) {
item.Function();
}
Console.ReadLine();
}
}
class person {
public virtual void Function() {//虚方法
Console.WriteLine("我是人");
}
}
class Liuguan : person {
public override void Function() {
// base.Function();
Console.WriteLine("我是刘冠");
}
}
class Wangming : person {
public override void Function() {
// base.Function();
Console.WriteLine("我是王明");
}
} }

C#基础强化-继承与多态的更多相关文章

  1. C++_基础_继承、多态

    内容: (1)子类中的拷贝构造和拷贝赋值 (2)多继承和虚继承 (3)多态的初识 (4)虚析构的特性和使用 (5)多态的底层实现 (6)纯虚函数.抽象类的概念 1.子类中的拷贝构造和拷贝赋值 子类中的 ...

  2. python基础——继承和多态

    python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

  3. C#基础总结之八面向对象知识点总结-继承与多态-接口

    .方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...

  4. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  5. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  6. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  7. Java基础知识回顾之三 ----- 封装、继承和多态

    前言 在上一篇中回顾了java的修饰符和String类,这篇就来回顾下Java的三大特性:封装.继承.多态. 封装 什么是封装 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装 ...

  8. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  9. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

随机推荐

  1. 沙盒解决方案解决SharePoint 2013 以其他身份登陆的问题

    众所周知,SharePoint 2013没有像SharePoint 2010那样有一个叫"以其他身份登录"的菜单项. 当然解决方案也很多,比如你可以直接修改Welcome.ascx ...

  2. Amabri:如何删除或停止指定的服务

    原文地址:https://cwiki.apache.org/confluence/display/AMBARI/Using+APIs+to+delete+a+service+or+all+host+c ...

  3. Apache Spark 1.6 Hadoop 2.6 Mac下单机安装配置

    一. 下载资料 1. JDK 1.6 + 2. Scala 2.10.4 3. Hadoop 2.6.4 4. Spark 1.6 二.预先安装 1. 安装JDK 2. 安装Scala 2.10.4 ...

  4. Linux Distribution / ROM

    Linux发行版 http://unix.stackexchange.com/questions/87011/how-to-easily-build-your-own-linux-distro 这个文 ...

  5. Android 自定义控件之继承ViewGroup创建新容器

    欢迎大家来学习本节内容,前几节我们已经学习了其他几种自定义控件,分别是Andriod 自定义控件之音频条及 Andriod 自定义控件之创建可以复用的组合控件还没有学习的同学请先去学习下,因为本节将使 ...

  6. React Native 之 TextInput使用

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  7. 关于Xcode8打印一堆log问题

    最近太忙了,一直没时间 写博客,项目基本搞完了,这几天没事多写几篇博客.欢迎加群交流iOS技术,QQ交流群:45992174. 刚装的xcode8,不知道从哪来的一堆log 去除方法:Xcode8-- ...

  8. 【代码笔记】iOS-自定义开关

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> #import "ToggleView.h&qu ...

  9. MySQL 主从复制

    1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  10. java 后台开发关键词解释

    bean类:是一些实体类,包括viewbean,databean等等.action类:可作为接收显示层的数据,连接显示层和业务逻辑实现层的控制层.model类:MVC中model层就是到层.在java ...