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 ...
随机推荐
- Binary System
Description Usually we use number in the decimal system, for it is so convenient for us to remember ...
- 设计模式模式游客(Visitor)摘录
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还 ...
- 【转】Android 避免APP启动闪黑屏(Theme和Style)
前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解决,最后找到了下面的方法.闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和on ...
- File类基本操作之OutputStream字节输出流
贴代码了,已经測试,可正常编译 package org.mark.streamRW; import java.io.File; import java.io.FileOutputStream; imp ...
- 定向爬虫之爬一爬各个学校新闻的认识(【1】对Url的认识)
昨天早上,我习惯性的打开博客园,看一看别人的写的博客.突然想起,自己好像没有写过什么博客,所以就心血来潮,把我现在做得事情写出来, 这也是对我目前的学习的一种总结.望大神指点.... 对于一间学校的新 ...
- T-SQL技术收集——删除重复数据
原文:T-SQL技术收集--删除重复数据 在工作和面试中,经常出现如何查询或者删除重复数据的问题,如果有主键,那还好办一点,如果没有主键,那就有点麻烦. 当一个表上没有辅助键时,如果使用SSMS界面来 ...
- 超过lua上帝的语言
上帝的语言(god)它是基于lua和RPP新一代编程语言 为什么需要它? 1.好多人不喜欢lua语法,god的语法更像C 2.god支持元编程.闭包.协程 3.凡是lua支持的特性god也支持,lua ...
- UDP(socket)数据访问和封装情况C++代码
配置QT下的pro文件 TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt LIBS += -lWs2_32 ...
- js调用跨域
web aapi 初体验 解决js调用跨域问题 跨域界定 常见跨域: 同IP不同端口: http:IP:8001/api/user http:IP:8002/api/user 不同IP不同 ...
- POJ 1252 Euro Efficiency
背包 要么 BFS 意大利是说给你几个基本的货币,组成 1~100 所有货币,使用基本上的货币量以最小的. 出口 用法概率.和最大使用量. 能够BFS 有可能 . 只是记得数组开大点. 可能会出现 1 ...