面向对象-个人看法

面向对象与多态详解
本文深入浅出地讲解了面向对象的基本概念,包括类、对象、继承、抽象类及多态等内容。并通过实例帮助理解面向对象编程的核心思想。
1.什么是面向对象?
面向对象就是找对象帮你做事。下面来举个例来说明一下什么是面向对象
例子:
   今天去吃早餐:
    找到你的对象:买煎饼大婶   找到对象
    告诉她,阿姨来一煎饼       要求对象
    她把煎饼给你               得到结果
假设时间推迟到了500年左右:这里说明一下面向过程
找米,洗米,生火,米+水放进去,添柴,等,吃。这一系列动作都是自己来完成。这就
是面向过程。(你要说500年那时也有煎饼卖,那你纯属跟我抬杠)
2.在代码中实现面向对象
根据任务找对象,代码中有对象吗?使用的时候,根据"模板"创建对应的对象,这个模板就是类
微软已经提供好的类例如:Random r = new Random();        // 创建了一个可以产生随机数的对象
int num = r.Next(10);                // 告诉代码要产生一个0到9的随机数
自己写个类,自己创建一个对象
[public] class 类名
{
        // 成员
        public void Func()
        {
                Console.WriteLine("我是一个类的方法");
        }
}
类名 <变量> = new 类名();        // 创建对象
使用对象的方式,通过调用方法或属性来实现
<变量>.Func();
3.类的成员
类是对象的模板,变量,存储描述对象的数据        字段
                对象的功能用方法来描述                方法
                提供字段访问的方式                属性
                构造方法提供初始化
4.部分类
部分类使用场景:当你要对你过去编写的类进行扩展的时候可以使用部分类。
部分类只是实现编码的组织方式,在编译成程序集的时候,
部分类说明:
  当一个类写完以后,测试稳定后尽量不要修改其代码
  如果将来需要扩展改类的内容,一般使用部分类来实现
  部分类只是实现编码的组织方式,在编译成程序集的时候,计算机视为一个类
也就是说可以将一个类写在多个文件中的方法
部分类语法:partial class 类名
5.构造方法:
作用:构造方法是为了是在创建对象的时候初始化字段,就是给字段赋值默认值。
种类:默认无参构造方法 如果用户提供了构造方法就没有默认无参构造方法。
构造方法可以重载。
调用:只有在new对象的时候才能显示调用构造方法。 New 类名();
关于构造方法的访问级别:public private 不写默认就是private 
属性:
属性不具备存储数据的能力(属性的存在一定有一个后台的字段)
属性本质就是方法
自动属性实际与普通属性一样,只是由系统自动生成了后台字段
自动属性没有所谓的只读只写之分,必须是可读可写
当对象不需要考虑字段约束时,可以用自动属性
6.静态类与静态成员
生命周期
   从第一次访问开始,到程序结束
   存储方式(难)
使用的方式
定义:加static 
静态的类 public static class 类名{}
静态的成员:
         Private static int num;
使用:
     静态类不存在使用的问题
     静态成员的使用:类名.成员名

什么时候考虑用静态
  使用静态一般就是在考虑使用静态成员
  最大的区别就是实例化,所以一般静态提供的是功能的方法或长久不变的常量
静态类:对于一个类,如果提供的都是静态成员就可以直接将其写成静态类

静态的全局性什么意思
    静态表示一开始就有,一直可以用到程序结束
    静态成员共有的,是共享的
初始化

静态构造方法 没有参数 无法显示调用,只有在程序第一次访问这个类的时候,自动调用
第一次访问:①第一次访问静态成员
②第一次访问实例成员
继承:主要学习
①        什么是继承,如何实现
②        构造方法的执行顺序
③        里氏转换原则

7.什么是继承
就是把一个类包含进来

在继承中的特征
   单根性:只允许有一个父类
   传递性:爷爷有的孙子也有
   基类object:任何类型直接或者间接继承于object(核心)

This与base
凡是是父类的字段用base.字段名
凡是是自己的字段用this.字段名
其实是一个意思。。。
is 运算符与 as 运算符
        -> is
                专门判断一个对象是否可以转换成指定类型
                        bool 对象 is 类型
                既然判断了,就是要转换后使用
                if(对象 is 类型)
                {
                        目标对象 = (目标类型)对象;
                }
                else
                {
                        目标对象 = null;
                }
        -> as
                目标类型 目标变量 = 对象 as 类型;
                // 如果对象可以转,就转换,并赋值给左边,否则赋值为null
构造方法的执行顺序
默认情况构造方法执行顺序
继承中构造方法的顺序先执行无参的父类的构造方法 然后再执行子类中的构造方法。
为什么先调用父类的构造方法
因为构造方法
开辟空间 也就是说new了后才能赋初值
8.多态
里氏转换原则-> 目的就是为了实现多态
   ①子类对象可以直接赋值为父类变量
   Person p=new Student();
Student stu=new Student();
Person p=stu;

  ② 指向子类对象的父类变量,可以强制类型转化为对应的子类对象 也就是说必须要满足第一条
Student stu1=(Student)p ;
Student stu1 = p as Student;
父类掉用子类方法

一个是对象不变 一个是对象内核在变

里氏转换原则的使用——多态
        -> 什么叫多态
                -> 男人是什么?
                        -> 人
                        -> 丈夫
                        -> 父亲
                        -> 员工
                -----------------------
                        zhangsan zjy = new ZhaoJianYu();
                        zjy.Role();   // 我是张三
                        Person p = (Person)zjy;
                        p.Role();        // 我是人
                        Husband hu = (Husband)zjy;
                        hu.Role();        // 我是老公
                        
                        无论谁都应该可以调用Role()方法
                        
                -> 将USB设备插入计算机会怎么样?
                        电扇        .插入()        凉快了
                        灯                .插入()        天亮了
                        U盘                .插入()        数据传输了
                        
                        三个对象不能统一调用,继承与同一个父类
                        
                        1、在父类方法中加virtual
                        2、在子类方法中加override
        -> 如何实现多态
                -> 继承是多态实现的前提,里氏转换时多态实现的条件
                -> 基本步骤
                        -> 写一个父类
                        -> 写子类
                        -> 有同名同参的方法(完全一样的方法)
                        -> 添加修饰符(new 系, virtual+override 系)
                        -> 使用都是创建子类交给父类使用

同一个对象,表现的不同形态。
隐藏基类方法  重写基类方法
9.抽象方法
        ->  有时就是为了多态,不需要父类方法有方法体,那就不用写方法体
                有时不知道父类方法该怎么写,不用写
        -> 就是方法没有方法体,在方法前加上一个 abstract
                public void Func()
                {
                        // 空实现的方法
                }
                
                public abstract void Func();  // 没有方法体
        -> 将方法定义为抽象的,就是告诉用户有一个方法了,可以去调用
                但是这个方法必须由子类重写才行,否则没有实现过程
        -> 抽象方法怎么用
                -> 定义
                        抽象方法只允许在抽象类中(难点)
                        abstract class MyClass {}
                        抽象类就是为了多态而存在,抽象类不能实例化(new 对象)
                -> 使用
                        -> 抽象法在子类中必须实现,除非子类也是抽象方法
                        -> 如何重写
                                public override void Func()
                                {
                                        // 方法体
                                }
                        -> 调用的时候与虚方法一样

10、 抽象类
        -> 就是为了多态而存在的
        -> 抽象类的写法
                加 abstract 就可以了
        -> 抽象类的成员有哪些
                -> 同样也是描述对象的,但是描述对象的时候上升到了一个概念的层次
                -> 抽象类比一般类多抽象成员
                -> 抽象成员有哪些呢?(抽象方法)
                        -> 抽象的方法
                        -> 抽象的属性
                        -> 抽象的索引
                        -> 抽象的事件
                -> 总结
                        抽象类比一般类多 abstract 和 抽象成员
                        凡是和方法可以对上号的都可以有抽象的版本
        -> 子类如何实现
                -> override 就可以了
                -> 补充:
                        重写过的方法,还可以被子类重写
        -> 构造方法
                -> 有没有构造方法
                -> 但是构造方法不能被 new 调用,只能有子类 :base 调用
                -> 抽象类的构造方法一般是 protected

11.抽象属性 是用来来描述事物特征

自动属性与抽象属性
不同点:
   自动属性是有系统自动生成字段,因此get,set必须成对出现,表示字段可以使用
抽象属性中的get,set表示的实际上是抽象的方法,其作用是告诉子类具有什么样的方法,是可读的属性还是可读可写的属性
12.多态再次说明:说明多态在面向对象的重要性
什么是多态,就是一个对象表现出来多种形态,
这个一个对象可以从2个角度去看:
外界人的角度去看:好比说我现在有一个黑盒子,黑盒子里面有一个按钮,我在黑盒子里面放什么,我按下按钮,它就做什么事情,这个按钮没有变化过,这就是说同一个对象同一个动作表现出不同的现象。
从内部观点来:这个对象是没有变的,你new 出来的,这个是根据外部环境发生变化引起。比如这里有一个馒头你放到锅里去蒸,它就变成熟馒头,你放在水里面煮它就变成泡馒头,它这个对象没有改变,当你赋值给指定父类对象时,类型发生了变化。

再举例说明一下:
什么是多态,就是一个对象表现出来多种形态,
这个一个对象可以从2个角度去看:
外界人的角度去看:好比说我现在有一个黑盒子,黑盒子里面有一个按钮,我在黑盒子里面放什么,我按下按钮,它就做什么事情,这个按钮没有变化过,这就是说同一个对象同一个动作表现出不同的现象。
从内部观点来:这个对象是没有变的,你new 出来的,这个是根据外部环境发生变化引起。比如这里有一个馒头你放到锅里去蒸,它就变成熟馒头,你放在水里面煮它就变成泡馒头,它这个对象没有改变,当你赋值给指定父类对象时,类型发生了变化。
这就是所谓的隐藏基类方法 和重写基类方法

说说多态在工作中的运用场景,比如你项目运行时你要更换你的数据库,这时你就按照你原来写的接口,实现下接口就行了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值