C#-面向对象的多态思想 ---ShinePans
|
总结: 多态是面向对象的核心.---------能够理解为一个方法,多种实现, 在这里能够用虚方法,抽象类,接口能够实现多态 |
1.首先利用接口来实现多态:
| 接口相当于"功能,"接口能够实现多继承,分为 显式实现接口和隐式实现接口 keyword为interface |
格式:
interface 接口名
{
string ......
int ....
void 方法名(); //定义方法
}
代码演示样例:(显示实现接口)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Interface_test
{
class Program
{
static void Main(string[] args)
{
Car c = new Car();
c.Color = "黑色";
c.Run();
c.Stop();
System.Console.ReadLine();
}
}
interface Icar
{
void Run();
void Stop();
}
interface ICarColor
{
string Color { get; set; }
}
class Car:Icar,ICarColor //定义Car类并继承了多个接口
{
private string color;
public string Color
{
get
{
return color;
}
set
{
color = value;
}
}
public void Run() //实现接口方法
{
System.Console.WriteLine("{0}汽车启动!", color);
}
public void Stop()
{
System.Console.WriteLine("{0}汽车停下!", color);
}
}
}
代码演示样例:(隐式实现接口)
class program
{
static void Main()
{
Car c=new Car();
c.show(); //调用Car的show();
Icar ic=c;
//将Car 转换为 Icar接口
ic.show()
System.Console.ReadLine();
}
interface
Icar
{
void show();
}
class Car:ICar
{
public void show()
{
System.Console.WriteLine("运行show()");
}
}
}
2.其次利用抽象类实现多态:
抽象类是不详细的,定义方法时仅仅须要定义抽象方法,抽象类不能实例化
格式:
public abstract class类名
{
public string Name; //定义字段
public void show()
{
} //定义方法
public abstract string Color { get;set} //定义抽象属性
public abstract void Run(); //定义抽象方法
public abstrat void Stop();
}
代码演示样例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Abstract_test
{
class Program
{
static void Main(string[] args)
{
Car c = new BMW();
c.Name = "宝马";
c.Color = "红色";
c.show();
c.Run();
c.Stop();
System.Console.ReadLine();
}
}
public abstract class Car
{
public string Name;
public void show()
{
System.Console.WriteLine("show方法:这是一辆"+Name);
}
public abstract string Color { get; set; } //定义抽象属性
public abstract void Run();
public abstract void Stop();
}
public class BMW :Car
{
private string color;
public override string Color
{
get
{
return color;
}
set
{
color=value;
}
}
public override void Run() //实现抽象类的抽象方法
{
System.Console.WriteLine("实现Run()方法:{0}{1}启动", color, Name);
}
public override void Stop()
{
System.Console.WriteLine("实现Stop()方法:{0}{1}停止", color, Name);
}
}
}
抽象类总结: 抽象类中能够写方法,也能够定义抽象方法,在实现这个抽象类的类时,抽象方法须要实现
3.最后能够利用虚方法来实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Virtual_Test
{
class Program
{
static void Main(string[] args)
{
//虚方法:能够被重写 keyword: virtual
//定义方式 public virtual string GetStrig(string name)
//{ return name +"您好"; }
//利用override重写虚方法
Car c = new Car();
c.Name = "BMW";
c.run();
NewCar n = new NewCar();
n.Name = "BMW";
n.run();
Console.ReadLine();
}
class Car
{
private string name;
public string Name
{
get { return name; }
set { name = value.Length > 0 ? value : name; }
}
public virtual void run()
{
Console.WriteLine("{0}汽车跑起来", name);
} }
class NewCar:Car //NewCar 继承自Car
{
public override void run() //重写虚方法
{
Console.WriteLine("新的{0}汽车跑起来", Name);
}
}
}
}
C#-面向对象的多态思想 ---ShinePans的更多相关文章
- IT第十九天 - 继承、接口、多态、面向对象的编程思想
IT第十九天 上午 继承 1.一般情况下,子类在继承父类时,会调用父类中的无参构造方法,即默认的构造方法:如果在父类中只写了有参的构造方法,这时如果在子类中继承时,就会出现报错,原因是子类继承父类时无 ...
- Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)
Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...
- 「MoreThanJava」Day 6:面向对象进阶——多态
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇
一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...
- 黑马程序员_Java面向对象3_多态
5.面向对象_多态 多态定义:某一种事物存在的多种形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型. 猫 x = new 猫(); 同时猫也是动物的一种,也可以把猫称为动物. 动物 y = n ...
- 面向对象的编程思想和Java中类的概念与设计
面向对象的编程思想学习,面向对象内容的三条主线;1.java类及类的对象2.面向对象的三大特征3.其他关键字学习内容:3.1面向对象与面向过程面向对象与面向过程在应用上的区别 Java中类的概念与设计 ...
- Python入门之面向对象的多态和继承
本章内容 Python面向对象的多态和继承对比 ========================================= 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的 ...
- Java面向对象之多态(来源于身边的案例)
2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...
- C++面向对象的编程思想机器人
C++的面向对象的编程思想如下,一般情况为一个类中包含了这个对象的所有属性与函数,直接调用这个对象就可以对这个对象执行它可以使用的任何操作. #include <iostream> cla ...
随机推荐
- Robotium调用getActivity()导致程序挂起的方法
1. 问题背景的叙述性说明 需要直接用在工作中没有项目的源代码robotium测试目标android平台launcher,该平台的基础上,当前日期的版本号android 4.4.2.之前我用来验证的可 ...
- 什么时候PHP经验MySQL存储过程
1.MySQL存储过程 数据库语言,我们经常使用的操作SQL语句必须首先编译在运行时.然后运行,存储过程(Stored Procedure)它被设置为完成一个特定的功能SQL报表设置.编译存储在数据库 ...
- 一切从编辑器说起:web前端代码编辑器
俗话说:工欲善其事,必先利其器. 工欲善其事必先利其器.谓工匠想要使他的工作做好,一定要先让工具锋利.比喻要做好一件事,准备工作非常重要. 前端写代码也是一样,需要一个好的适合自己的代码编辑器. 我想 ...
- 【TCP/IP 合约】 TCP/IP 基金会
总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后開始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...
- 策略模式Strategy——坐什么车回家?
1.存在的问题和模型 :2014年6月 学校:廊坊师范 家:石家庄 人物:学生 又快到期末考试了.回家的节奏也奔上日程,无聊之余就想想这次回家的事儿. 对我来说回 ...
- Servlet实例解说
打开昨天上午,负责人突然问我,client控制信息,如何让在后台?我想回答:假设总体提交form,在C#使用代码request获取表单的内容.假设局部提交,在用JS和Ajax交互,通过Ajax的ope ...
- 非阻塞IOserver型号
让我们来考虑一个场景,你和百万玩家的魔兽世界的忠实粉丝.时间之旅打每到周末boss. 每当周末比赛server在亚历山大,因为至少在同一时间数十万用户在线. 假设我们的多-threaded果酱serv ...
- Class撑起了OOP世界的天。Class类是OO的基本单元,OO的世界都是通过一个一个的类协作完成的,提高软件的重用性、灵活性和扩展性(转)
引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的“社会”关系,从而让我们抛弃书上的那些死记硬背的概 ...
- URAL 1141. RSA Attack RSA加密演算法
标题来源:URAL 1141. RSA Attack 意甲冠军:给你e n c 并有m^e = c(mod n) 求 m 思路:首先学习RSA算法 here 过程大致是 1.发送的信息是m 2.随机选 ...
- hdu 4445 Crazy Tank (暴力枚举)
Crazy Tank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...