C#基础-面向对象-多态
多态,不同对象对同一方法的不同实现
使用abstract关键字表示抽象类
// 表示是一个抽象类
public abstract class Animal
{
private string name;
private double weight;
}
抽象类
// 表示是一个抽象类
public abstract class Animal
{
private string name;
private double weight;
public string Name { get => name; set => name = value; }
public double Weight { get => weight; set => weight = value; }
public Animal() { }
public Animal(string _name,double _weight)
{
this.Name = _name;
this.Weight = _weight;
}
}
抽象类不能被实例化
public class Dog:Animal
{
}
Dog类继承抽象类Animal后可以实例化
static void Main(string[] args)
{
Dog d = new Dog();
d.Name = "Dog";
d.Weight = 10;
}
抽象类中的抽象方法
1.方法就没有主体,只有定义
2.子类在继承抽象类时,必须实现抽象类中的抽象方法
3.使用override进行重写
Animal中ShowInfo是抽象方法
// 表示是一个抽象类
public abstract class Animal
{
// 省略···
public void Show()
{
Console.WriteLine("名字:{0},体重:{1}",this.Name,this.Weight);
}
// 如果一个方法声明为abstract抽象方法,方法就没有主体,只有定义
// 继承这个抽象类的所有子类都要实现这个方法
public abstract void ShowInfo();
}
Dog中使用override重写
public class Dog:Animal
{
// 子类在继承抽象类时,必须实现抽象类中的抽象方法
// 使用override进行重写
public override void ShowInfo()
{
Console.WriteLine("这是子类重写父类的抽象方法");
}
}
实现效果如下:
static void Main(string[] args)
{
Dog d = new Dog();
d.Name = "Dog";
d.Weight = 10;
d.Show();
d.ShowInfo();
}
多态定义:不同对象对同一方法做出不同的实现
Animal是一个抽象类
// 表示是一个抽象类
public abstract class Animal
{
// 省略···
// 抽象类的抽象方法ShowInfo()
public abstract void ShowInfo();
}
Dog中使用override重写继承Animal
public class Dog:Animal
{
public override void ShowInfo()
{
Console.WriteLine("这是Dog重写Animal的抽象方法");
}
}
新建Pig类继承Animal
public class Pig:Animal
{
public override void ShowInfo()
{
Console.WriteLine("Pig对Animal的抽象方法实现");
}
}
抽象类中父类可以通过子类实现
实现效果如下:
static void Main(string[] args)
{
// 多态定义:不同对象对同一方法做出不同的实现
// 抽象类不能直接被实例化
// 抽象类的父类指向子类,具体实现可以由子类实现
Animal d = new Dog(); // 父类指向Dog类
d.ShowInfo();
d = new Pig(); // 父类指向Pig类
d.ShowInfo();
}
效果如下:
接口
应用:为了实现跨行转账业务,定义了一个接口,该接口包含了一个用于存取款的方法和一个返回余额的属性
接口只能对方法定义
抽象类和接口的区别:抽象类有字段和属性,接口没有
抽象类只能单一继承,接口可以多个继承
IBank接口
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp6
{
// 接口只是对于方法定义
// 抽象类和接口的区别:抽象类有字段和属性,接口没有
// 抽象类只能单一继承,接口可以多个继承
interface IBank
{
// 定义了一个接口,只有接口定义,没有方法实现
// 它是特殊的抽象方法,没有abstract关键字
// 子接口实现也不需要像抽象方法一样用override
void Zhuan(double dzhuan);
}
}
IUser接口
namespace ConsoleApp6
{
interface IUser
{
}
}
对接口的继承使用
// 银行卡
// 可以继承多个接口
class UserCard:IBank,IUser
{
public void Zhuan(double dZhuan)
{
// 继承了接口函数
}
}
C#基础-面向对象-多态的更多相关文章
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- 【基础】Equal方法、面向对象-多态-继承-封装
package Test; public class L3_1 { public static void main(String[] args) { C c1=new C(100); C c2=new ...
- C#基础-----面向对象
C#基础-----面向对象(一) 分类: C#基础2015-06-08 14:10 2人阅读 评论(0) 收藏 举报 1,面向对象 什么是面向对象?一个分析问题的方式(增强了程序的可扩展性) 几个名词 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...
- 第二十五节:Java语言基础-面向对象基础
面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- Java编程基础-面向对象(中)
本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一 ...
随机推荐
- .net core 共享 .Net Forms Authentication cookie
Asp.net 项目迁移到 asp.net core 项目后需要 兼容以前老的项目的登录方式. Forms Authentication cookie 登录. 从网上搜集到关于这个问题的解决思路都没有 ...
- <Android 基础(十六)> Toast
介绍 A toast provides simple feedback about an operation in a small popup. It only fills the amount of ...
- 构建跨平台APP开发的两本书,这里重点推荐下
第一本是<构建跨平台:jquery Mobile移动应用实战> 是目前jqm开发写的比较入门的一本书,上手很快,但是高手我觉得就没有必要学习了,因为写的比较浅显. 第二本是<构建跨平 ...
- --disable-column-names,--skip-column-names,--column-names=0
--disable-column-names,--skip-column-names,--column-names=0
- 我的java开发规范
关于文件的命名参考阮一峰的这篇文章:http://www.ruanyifeng.com/blog/2017/02/filename-should-be-lowercase.html,文中说文件名全部使 ...
- Spring Boot入门程序-STS
使用Eclipse EE 中的 Spring Tool插件,完成 第一个Spring Boot应用程序的创建. 一.安装Spirng Tool插件 在 Eclipse EE Oxygen版本,安装“S ...
- SourceTree Win10 安装过程及配置
SourceTree 是一款拥有可视化界面的项目版本控制软件,适用于git项目管理,同时它集成了 git flow 工作流程,对于不熟悉 git 命令的初学者来说,可以通过 SourceTree 快速 ...
- Homestead 中使用 laravel-mix 问题汇总
按照 laravel 官方文档在准备使用 laravel-mix 时遇到了很多问题,许多同学应该会遇到同样的问题,自己花了一些时间来解决这些问题,在此做个笔记帮助大家减少填坑的时间. 环境 larav ...
- 10大炫酷的HTML5文字动画特效欣赏
文字是网页中最基本的元素,在CSS2.0时代,我们只能在网页上展示静态的文字,只能改变他的大小和颜色,显得枯燥无味.随着HTML5的发展,现在网页中的文字样式变得越来越丰富了,甚至出现了文字动画,HT ...
- S/4HANA for Customer Management里的搜索分页处理
这篇文章的英文版我发在了SAP Community上:Paging Implementation in S/4HANA for Customer Management https://blogs.sa ...