大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开始讲一下面向对象的一点知识,请你们多多点评和讨论!!


1. 结构体不能继承,但是可以实现接口.
                 但是所有的结构体都默认从ValueType这个类继承.
                 而ValueType这个类从Object类继承.
                 根据继承的传递性 所以我们的结构体对象中就拥有object类的成员.
              可以从反编译工具去查看,我的反编译工具过期了,没截图
              2. 被sealed修饰的类,叫做密封类.
                 密封类不能作为父类. 但是可以作为子类.
              可以从反编译工具去查看,我的反编译工具过期了,没截图
              3. 子类的访问级别不能比父类高


                 类:  public--> internal
                 成员: public--> internal--> protected--> private
               
              4. 静态类是不能被继承的.
                 a. 静态类不能相互继承 因为静态类没有实例构造函数
                 b. 静态类直接从object类继承.
                 c. 静态类的本质其实是1个密封类.
                
              5. this和base(进入继承那个博客说的挺详细的,可以进入那里看看)
                 a. this关键字
                    1)  代表当前对象
                        在实例方法中使用this关键字就代表当前对象
                        通过this关键字可以点出本类的所有的成员和父类的非私有成员
                    2)  调用本类的其他的构造函数
                        在构造函数的后面 的 this  代表调用本类的其他的构造函数
                 b. base关键字
                    1)  在实例方法中 通过base关键字可以显示的访问子类对象中的非私有的父类成员.
                    2)  调用父类的构造函数
                        在子类的构造函数的后面的 base 代表调用父类的构造函数.
                                  
              6. 在子类中可以存在和父类中的同名方法,如果方法的参数的个数或者类型不同
                 那么他们子类中构成重载.
              
              7. 在子类对象中是可以存在和父类相同的成员.
                 创建父类对象,通过父类对象调用这个同名成员 毫无疑问调用的是父类的.
                 创建子类对象,通过子类对象调用这个同名成员 调用的是子类自己独有的.
                
                 子类中的同名成员会将父类的同名覆盖掉.所以我们通过子类对象来调用这个同名成员的时候
                 调用的是子类的同名成员.
                 请记住,通过子类对象是无论如何也调用不到同名的父类成员,因为子类的同名成员将父类的同名成员覆盖掉.
                 但是在子类的内部,仍然是可以通过base关键字调用到父类的同名成员.
             
              8. 默认情况下,子类中的同名成员在隐藏父类的同名成员的时候.
                 编译器会提示程序员.
                 如果我们不想被编译器提示 我们确实是要去隐藏父类的同名成员 这个时候就加上new关键字.
                 告诉编译器 我是有意而为之 不要多嘴.
                 new关键字加与不加 都会将父类的同名成员隐藏掉.
                
             
              9. new关键字有什么作用啊?
                 a. 创建对象
                 b. 隐藏父类的同名成员
                 c. 限制泛型的类型.
                
              10. 里氏替换原则(LSP)
                 a. 子类可以替换父类的位置,并且程序的功能不受1丁点影响.
                    为什么?
                    1). 因为父类拥有的功能,子类都拥有,子类只会多功能而不会少功能.
                    2). 要1个父类对象. 但是我们却给了1个子类对象 这是说得通的.
                        因为子类是1个父类.
                    3). 是满足自动类型转换的:
                        父类和子类是相互兼容的. 父类的范围是比子类的范围要大的.
                       
                 b. 里氏替换原则的具体表现形式:
                    当1个父类变量指向1个子类对象的时候. 这个时候就有我们的里氏替换原则了.
                
                 c. 里氏替换原则的好处在那?
                    a. 最大的好处是为了多态.
                    b. 1个父类变量不仅仅可以指向父类对象,还可以指向它的子类对象.
         
                 d. 在替换的时候,只能是子类替换父类. 
                    没有继承关系的绝对不能替换的.
                    父类也不能去替换子类的位置.
                   
                 e. 当1个父类变量指向1个子类对象的时候.
                    通过这个父类变量只能调用到这个子类对象中的父类成员.
                    子类独有的成员 通过这个父类变量是无法调用的.
                   
                    哪怕子类和父类中存在同名成员,通过这个父类变量调用这个同名成员仍然调用的是父类的.
                
              11.  在创建对象的时候,这个对象的大小:
                   本类和父类的所有的字段 再加上1个同步索引快和1个类型指针.
             
             
             
              12. 里氏替换原则最爽的地方
                  1个父类类型的变量中 可以存储1个父类对象的引用和子类对象的引用
                  不爽的地方在于,取出来以后  类型是1个父类类型的 通过这个父类类型只能访问到子类中的父类成员.
                 
                  好处: 存的时候很爽.
                  坏处: 取出来的时候,类型是1个父类类型. 无法调用到子类独有的成员 。
                 
             
              13.  类型转换
                  a.  没有办法直接的将1个父类类型的变量的值 赋值给1个 子类变量.
                  b.  如果一定要赋值的话,那么我们使用强制转换的语法就可以了.
                  c.  类型转换的意义:
                      强制的把父类变量中的值(对象的地址) 赋值给 子类变量.
                  d.  转换成功的条件:
                      如果子类变量能够指向父类变量指向的对象.那么就可以转换成功.
                      变量能够指向那些对象?
                      变量可以指向本类的对象和本类的子类对象.
                  e.  类型转换只适合于有继承关系的 否则就会报语法错误.
                     
              14. 类型判断
                  is关键字可以判断某个变量的类型.
                  a. 某个变量一定是这个变量的类型
                     Person p;  p变量一定是1个Person类型.
                  b. 如果变量指向1个子类对象, 那么这个变量也是这个子类类型.
                     Person p = new Studnet();
                     p一定是1个Person类型.
                     p也是1个Student类型的.
                 
                  c. 如果1个父类变量指向1个子类对象,那么这个父类变量的类型.
                     即是父类的类型. 也是指向的子类对象的类型 也是指向的子类对象的父类类型.
                     Person p = new ItCastStu();
                     p是1个Person类型.
                     p是ItCastStu
                     p是Student类型.
                 
                  d. 子类一定是1个父类类型.
                     当父类变量指向1个子类对象的时候,这个父类变量也是这个子类类型.
                 
             
                  eg:  p is Student
                       p变量的类型本身就是Student
                       p变量指向1个Student对象.
                       p变量指向1个Student子类对象,.
                 
                  通过is关键字来判断1个引用类型的变量是否指向1个指定的对象.
             
                  is关键字只适合用于判断拥有继承关系的类型.
                 
              15. 在做转换的时候,如果要保证不会发生异常,我们在转换之前最好是做1个类型判断.
                  as 转换, 与强制转换的效果是一样的.
                 
                  as转换在转换失败的时候,不报异常,返回null
                  强制转换如果转换失败 会报异常

面向对象(基础oop)之继承总结的更多相关文章

  1. c#面向对象基础 封装、继承

    一.封装 这是一种隐藏的特性.可以用一个公式来展示类的封装特性: 封装的类=数据  +  对此数据进行的操作(即算法) 通俗的说,封装就是:包起外界不必要知道的东西,只向外界展露可供展示的东西. 在面 ...

  2. Python全栈--9 __import__ 反射和面向对象基础 self 封装 继承(多继承的顺序) 多态

    一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  3. python基础-9__import__ 反射和面向对象基础 self 封装 继承(多继承顺序) 多态

    一 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  4. python开发面向对象基础:组合&继承

    一,组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合      人类装备了武器类就是组合 1.圆环,将圆类实例后传给圆环类 #!/usr/bin/env python #_*_ ...

  5. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

  6. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  7. 从零开始学Python第六周:面向对象基础(需修改)

    标签(空格分隔): 面向对象 一,面向对象基础 (1)面向对象概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  8. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  9. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  10. 【重走Android之路】【Java面向对象基础(三)】面向对象思想

    [重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想   1 面向对象的WWH   1.1 What--什么是面向对象         首先,要理解“对象”.在Thinkin ...

随机推荐

  1. leetcode 84. 柱状图中最大的矩形 JAVA

    题目: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高 ...

  2. cnpm安装过程中提示optional install error: Package require os(darwin) not compatible with your platform(win32)解决方法

    运行cnpm install后,出现 虽然提示不适合Windows,但是问题好像是sass loader出问题的.所以只要执行下面命令即可: 方案一: cnpm rebuild node-sass # ...

  3. [Virtualization] VMware虚拟机三种网络模式详解(转)

    原文:http://www.linuxidc.com/Linux/2016-09/135521.htm

  4. JMeter PerfMon Metrics Collector性能监控插件

    官方文档地址https://jmeter-plugins.org/wiki/PerfMon/ JMeter是一款压力测试工具,我们也可以用它来监控服务器资源使用情况. JMeter正常自带可以通过To ...

  5. 如何在CentOS 7上使用vsftpd设置ftp服务器

    一.前言介绍 FTP(文件传输协议)是一种标准的客户机-服务器网络协议,允许用户在远程网络之间传输文件. 有几个开源的FTP服务器可用于Linux.最受欢迎和广泛使用的是pureftpd.proftp ...

  6. 开源代码MyCommons

    MyCommons是我在开发Android App中,经过多个项目的实践和应用,上十次修改的,总结起来的代码,目的是希望大家能够快速的完成项目的开发. 主要也是参考了afinal和xutils2个框架 ...

  7. P4542 [ZJOI2011]营救皮卡丘

    题目链接 题意分析 我们仔细分析一下 发现题目要求用最多\(k\)条路径实现最小权覆盖 首先由于最小路径覆盖针对的是有向图 但是这是一个无向图 所以我们面向对象编程 我们维护一个数组\(d[i][j] ...

  8. iOS 时区获取问题

    时区缩写 UTC, CST, GMT, CEST 以及转换 UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委员会规定和推荐,并由国际时间局(BI ...

  9. JavaIO系统

    为了方便记忆,特将IO中涉及的类进行整理如下: 1.File类 提供了目录操作,查看文件属性等. 2.java IO类层次 面向字节流的类为InputStream.OutputStream:面向字符流 ...

  10. Linux Shell编程、变量、控制语句

    为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...