C#中面向对象——封装,继承,多态

摘要:提到面向对象就不得不说面向对象的三大特性,封装;继承;多态!下面还是通过图和例子的方式继续了解一下面向对象的三个核心!

下面还是通过具体的图进行分析:

通过代码来感受一下语法:

 class Program
 {
    static void Main(string[] args)
    {
         Fu f1 = new Fu();
         f1.GetFu();     //父类就只能获取到父类的属性方法,是不能获取到子类的方法的
         zi z1 = new zi();
         z1.GetZi();     //子类既可以获取到子类的方法属性,又可以获取到父类的属性和方法
         z1.GetFu();
         Console.ReadKey();
    }
}
 class Fu
 {
     public void GetFu()
     {
         Console.WriteLine("父类方法");
     }
 }
 class zi:Fu   //C#和C++不同,这里只能单继承
 {
     public void GetZi()
     {
         Console.WriteLine("子类方法");
     }
 }

通过图来看看继承的关系:

三.多态(一个对象可以有多种形态):

1.概念:是指一个名字可具有多种语义。在面向对象语言中,多态是在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法。

  • 实现多态,有二种方式,覆盖,重载。
  • 多态使我们可以把一个子类对象看作是一个父类对象类型

例:father A = new child()

2.多态分为两种:

  • 编译时多态和运行时多态。

编译时类型:定义时类型(主观概念)把它看作什么。
运行时类型:真实类型(客观概念) 实际上他是什么。
重载又叫编译时多态;覆盖又称运行时多态。

3.运行时多态的三原则:

    1. 对象不变(改变的是主观认识)
    2. 对于对象的调用只能限于编译时类型的方法。
    3. 在程序的运行时,动态类型判定。运行时调用运行时类型,即他调用覆盖后的方法。

通过代码来感受一下语法:

class Program
    {
        static void Main(string[] args)
        {

            Fu f1 = new Zi();
            Console.WriteLine(f1);
            f1.Show();
            Zi z1 = new Zi();
            Console.WriteLine(z1);
            z1.Show();
            Console.ReadKey();
        }
    }
class Fu
    {
        public virtual void Show()   //静态方法是不能重写的
        {
            Console.WriteLine("父类的方法,在子类中将进行重写");
        }
    }
    class Zi : Fu
    {
        public void SayHello(string name)
        {
            Console.WriteLine(name+"你好");
        }
        public void SayHello(string name,string msg)//参数个数不同,和参数类型不同都可以构成重载
        {
            Console.WriteLine(name + "你好:    "+msg);
        }

        public override void Show()  //重写了父类的方法
        {
            Console.WriteLine("重写了父类的方法");
        }
        //public new void Show()  //当使用new关键字后在主函数中Fu的这个方法和Zi的这个方法成为了两个毫不相关的方法
        //{
        //    Console.WriteLine("重写了父类的方法");
        //}
    }

注意点:

  1. 多态是面向对象的重要特性之一,指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
  2. new重写实际上是对父类方法的隐藏,被覆盖的父类方法可以调用得到。因此new可以重写(或说是隐藏)的父类方法不一定要定义为虚方法或抽象方法。只是如果父类方法是虚方法或抽象方法时会覆盖父类方法,如果不是,则隐藏。
  3. 重载和覆盖的发生条件:
    重载,必然发生在一个类中,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关
    重写,必然发生在基类和派生类中,其类函数用virtual修饰,派生类用override修饰
    覆盖,在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字 new 修饰 

    隐藏,在子类中可以通过new 隐藏父类的方法
  4. new覆盖与重写、重载的区别:

    当子类与父类的参数不同时

    当基类函数不是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载)

    当基类函数是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载;因为参数不同,所以不是重写)

    当子类与父类的参数相同时

    当基类函数不是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载,因为基类不是虚函数,所以是隐藏不是重写)

    当基类函数是虚函数时,基类函数将被覆盖。(因为子类和基类不在同一范围内,所以不是重载)

时间: 2024-10-12 22:06:42

C#中面向对象——封装,继承,多态的相关文章

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)最近进行数据库操作,遇到一个问题,就是大量删除一个数据表中的数据后,由于设定了id是自增的,导致再插入时,默认生成的id会很大,这个时候想要再次插入新的数据,应该怎么办呢?1.明确目前最后一个id的大小select id from tags order by id DESC limit 0,1; 假设返回的是9,则设置数据表从10开始自增 2.修改这个数据表从10开始自增alter table tags auto_increme

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ? 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类. ? 在Python中实现继承非常简单,在声明类的时候,在类名后面添加一个小括号,就可以完成继承关系.单纯的从代码的层面上来看当两个类具有相同的功能或者特征的时候就可以使用继承.提取一个父类,这个父类中编写者两个类相同的部分,然后两个类分别去继承这个类就可以

面向对象三大特性(封装/继承/多态)

引入:在面向对象思想中,有三大特性,封装  继承  多态. 思考:我们在使用类和对象实现编程的时候,到底是遵循这什么样的逻辑呢?为什么要这样规范类呢? 引入:面向对象很重要的思想就是隐藏,即外部不知道类内部是如何实现业务逻辑的,只管调用和使用结果,这个就是面向对象三大特性之一:  封装 1.封装[掌握] 定义:封装,字面意思就是将内容装到某个容器中,并进行密封保存,在面向对象思想中,封装指数据和对数据的操作捆绑到一起,形成 对外界的隐藏,同时对外提供可以操作的接口. 1.数据:即要操作的数据,在

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

使用java中,面向对象封装+继承的方法算题

1.第一种:给定一行字符,逆序输出此字符串(空格.数字不输出),如"ab 23,(4 cd"输出"dc(,ba".(要求:使用面向对象封装+继承) class Bu { private String str; public Bu(){} public Bu(String str){ this.str = str; } public String getStr(){ return str; } public void setStr(String str){ this.

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表