c#重点[封装,继承,多肽]

面向对象的语言三大特点:封装、继承、多态

Ⅰ.封装:是把类的内部隐藏起来,以防止外部世界看见的一个面向对象的概念,通过关键字去控制变量,方法的访问权限。

1).访问修饰符:

Ⅱ.继承:

eg:我们建一个Person作为父类,Chinese作为子类

 1 class Person
 2     {
 3         public string name="zhangsan";
 4         public int age=21;
 5         //类里面有一个默认的构造方法,我们在下面写了一个构造方法,如果想去调用这个无参数的构造方法,那就要加一个无参构造方法
 6         public Person()
 7         {
 8             Console.WriteLine("我是一个人类");
 9         }
10         public void SayHi()
11         {
12             Console.WriteLine("hello,我是人类!");
13         }
14     }

Person

1  class Chinese:Person
2     {
3
4     }

Chinese

我们在程序入口里面调用父类里面的成员:

class Program
    {
        static void Main(string[] args)
        {
            Chinese c = new Chinese();
            Console.WriteLine(c.name);
            Console.WriteLine(c.age);
            c.SayHi();
        }
    }

Program

得到结果为:

1.为什么子类里面没有成员,还能调用?

如果,我把person里面的 [public string name="zhangsan";]变为私有成员[private string name;],调用结果显示?

以上的得出结论:

继承:

1.单继承,一个类只能继承一个类[一个儿子只有一个爹]
  2.Chinese:Person Chinese 子类/派生类 Person 父类/基类/超类
  3.Chinese:Person 那么Chinese继承了Person里面所有的成员(字段、方法),对于父类的私有成员,子类还是能继承到,只是没有访问权限

 2).所有的类型的基类是System.Object类

 3) . 构造函数不能被继承

4).子类Chinese里面添加一个方法

1     class Chinese:Person
2     {
3         public Chinese()
4         {
5             Console.WriteLine("我是中国人!");
6         }
7     }

Chinese

我们调用program看一下结果:

 class Program
    {
        static void Main(string[] args)
        {
            Chinese c = new Chinese();
            c.SayHi();
        }
    }

Program

结果显示:

4.当实例化子类对象时,首先调用父类的构造方法,然后调用子类的构造方法。

5).人类属于动物类animal,我们创建一个animal类让rerson类继承。chinese继承person,person继承animal

class Animal
    {
        public Animal()
        {
            Console.WriteLine("我是动物类!");
        }
    }

Animal

 class Person:Animal
    {
        public Person()
        {
            Console.WriteLine("我是人类");
        }
        public  void SayHi()
        {
            Console.WriteLine("hello,我是人类!");
        }

Person:Anima

    class Chinese:Person
    {
        public Chinese()
        {
            Console.WriteLine("我是中国人!");
        }
    }

Chinese:Person

结果显示:

5.如果A:B,B:C,那么A:C;

6).父类Person里面有一个SayHi()方法,如果在子类里面添加一个sayHi方法

class Chinese:Person
    {
        public Chinese()
        {
            Console.WriteLine("我是中国人!");
        }
        public void SayHi()
        {
            Console.WriteLine("你好,我是中国人");
        }
    }

Chinese里添加一个SayHi方法

结果显示:

我们来谈一下过程:

ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写

ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面加"virtual",加了"virtual"之后就告诉子类继承之后,子类只能覆写"override"

  

结果还是一样,结论显示:

6.一个子类和父类有相同的方法时,当运用子类的对象去调用该方法时,调用子类的方法,默认情况下,从父类的方法被隐藏掉,(有意隐藏,需要在子类的方法上加上New(可以加也可以不加))

如果想覆写/重写父类的方法,需要在父类里面设置该方法为虚方法(virtual),然后子类通过override关键字去覆写。

7).里氏替换原则:一个父类的变量可以接收子类的对象,反之不行。

class Person:Animal
    {
        public Person()
        {
            Console.WriteLine("我是人类");
        }
        public  void SayHi()
        {
            Console.WriteLine("hello,我是人类!");
        }
    }

Person

class Chinese:Person
    {
        public Chinese()
        {
            Console.WriteLine("我是中国人!");
        }
        public  void SayHi()
        {
            Console.WriteLine("你好,我是中国人");
        }
    }

Chinese:Person

 class Program
    {
        static void Main(string[] args)
        {
            //父类的变量可以接收到子类的任何类型
            //如果没有覆写的话,就近原则,p离person近,就调用person的sayHi方法
            Person p = new Chinese();
            p.SayHi();
            Console.ReadKey();
        }
    }

Program

结果:

覆写之后:

class Person:Animal
    {
        public Person()
        {
            Console.WriteLine("我是人类");
        }
        public virtual void SayHi()
        {
            Console.WriteLine("hello,我是人类!");
        }
    }

Person

class Chinese:Person
    {
        public Chinese()
        {
            Console.WriteLine("我是中国人!");
        }
        public  override void SayHi()
        {
            Console.WriteLine("你好,我是中国人");
        }
    }

Chinese

结果:

得出:

7.子类和父类有相同的方法,默认情况下(没有被覆写),该变量调用该方法时,调用的是父类的方法(就近原则);

当子类覆写该方法时,变量调用的是子类的方法。

8) .密封类 sealed class,不能被继承的类

   

9).继承的好处?

假设工厂要生产三孔的插座,它首先会把模型设计出来,模型里面只是定义了方法,模型没有写方法的具体内容,把公共的方法抽象出来,做程序的时候先写了一个接口,

让下面的类继承这个接口,这个接口并不实现具体的内容,只是定义方法名,返回的类型,具体实现什么效果是在子类里面override,所以继承的好处就是把公共的东西抽象出       来,减少了代码的重复性。

Ⅲ.多态 方法名相同,方法具体实现内容不同

1. 多态分为重载(overload)和覆写(override)

重载:方法名相同,方法里面的参数不同,参数的种类,个数或者顺序不同。

2. 只有父类的虚方法(virtual)才能被子类覆写,子类实现覆写用关键字override,如果不加override就隐藏了父类的方法(需要加上关键字new,eg: public new static void Chinese())

3. 静态方法不能被覆写,但可以被隐藏

4. 静态类里面只能有静态成员

5. 静态的成员不能带override ,virtual ,abstract

时间: 2024-08-07 04:32:26

c#重点[封装,继承,多肽]的相关文章

day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态

Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list.tuple.range 专门处理文本的附加序列类型(Text Sequence Types):str 专门处理二进制数据的附加序列类型(Binary Sequence Types): bytes.bytearray.mem

封装,继承,多态,接口

封装 封装的概述和好处: 是面向对象三大特征之一 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性隐藏,提供公共方法对其访问. 成员变量private,提供对应的getXxx()/setXxx()方法 好处: 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性 public class Student { String name; //int age

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

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

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

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

0908 封装继承

学习封装继承首先了解访问修饰符: 我们最常用的就两个:public.private 不常用的:protected.internal(系统默认) public:公共的,只要引用命名空间(程序集,项目中的文件夹)就可以使用. private:私有的,只有在本类内部才能使用. internal:内部的,当前程序集内可以访问,程序集就是命名空间,此修饰符是默认的. protected:被保护的,只有本类和它的子类才能使用. ----------------------------------------

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对

初识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("

使用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.

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

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

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