初学面向对象编程时的笔记

cls1里有一个aa() 假设所有成员都是public;
如果cls2继承cls1时
cls1 my = new
cls1();my.aa();
这个好说当然是执行cls1的aa方法啦(这不废话嘛^_^)
别丢板砖

继续
mycls2 my = new mycls2();my.aa();
这个比上面稍有改变

第一种情况:cls2中没写aa();
    执行的是cls1的aa方法

    因为它本身继承了cls1的方法 而他自己又没有重写父类的aa方法

第二种情况:cls2中写了名字为aa的方法并且前面加new关键字
    执行的是cls2的aa方法

第三种情况:cls2中写了名字为aa的方法并且前面加override关键字

    执行的是cls2的aa方法

    貌似case2和case3是一样的,其实不一样

    用new关键字:

        会把父类的方法废掉,父类的同名方法从此与他无关
以子类为主 你可以写

        跟父类名字一样参数不一样的方法,相当与重载

    用override关键字:

        方法重写,父类必须要有同名方法并且带virtual关键字

        并且重写的时候要遵循父类同名方法的参数


如果在cls2的aa方法中写aa();会造成死循环 导致堆栈溢出
但是如果想在cls2中访问cls1的aa方法怎么办呢^_^

用base.aa();就行啦
this关键字相当于当前实例本身
base关键字相当于被继承的父类

在一个类中方法同名参数不同叫重载
父类与子类中方法重名叫重写(并且参数也要一样^_^)

mycls1 my = new
mycls2();
这种变化较大(别被前面的cls1迷惑了)虽然实例是cls2实际上依然可以调用
父类的所有的方法 跟上面一种情况一样

如果cls2没写任何代码依然执行cls1的aa方法
当前的引用是cls1的 cls2里定义的成员会访问不到,继承自cls1的成员可以访问

如果 用override重写则能访问到 以前的什么工厂设计模式中经常这么弄

不管咋变 都是看他的引用 引用属于哪个个cls 那么
实例化的对象继承自那个cls的所有public成员(如果被重写了就改为重写的成员)都可以被外部访问
但是那个实例化对象自己另外的成员不能被外部访问


如果引用跟  实例化的对象属同一cls
如果重写了则调用子类的方法
没重写则调用父类的方法 就这么简单


两个互不相干的cls(哪怕在同一命名空间) 要想访问对方的成员 ,那个成员必须是public
如果是不同命名空间 或者项目
要想在其他的项目中 实例化那个cls,那个cls必须是public

要养成面向对象编程的习惯
到处都要用的变量
放到外面作为成员,
不要所有的业务逻辑全都一股脑写成一个个的方法堆起
不要访问级别 继承的什么都不管 全部写成
javascript函数形式的东西
这样的话跟oop就有点脱节了
可能开始不太习惯 但是你会发现这会给你设计程序带来莫大的好处


这些都是oop的基本常识 但是只要运用得当 也可以让你的程序运行得更好,别太在乎那些花哨的设计模式 并不是那些东西没用

只是别贸然模仿

时间: 2024-11-05 20:31:43

初学面向对象编程时的笔记的相关文章

JavaScript面向对象编程指南——学习笔记1

第1章 引言 1.1 回顾历史 1.2 变革之风 1.3 分析现状 1.4 展望未来 1.5 面向对象的程序设计 1.5.1 对象(属性和方法的集合) 1.5.2 类 (相似对象的共同特征,如麻雀.老鹰都是鸟类) 1.5.3 封装 (将属性和方法集合起来,也有封闭作用域的概念,如封装一个播放器对象) 1.5.4 聚合 (将几个对象合并成一个对象) 1.5.5 继承 (一个实例对象继承父级对象的一些属性和方法) 1.5.6 多态 (一个对象调用其他对象的方法,call和apply) 1.6 OPP

perl5 第十三章 Perl的面向对象编程

第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一.方法的重载十二.Perl类和对象的一些注释 本章介绍如何使用Perl的面向对象编程(OOP)特性及如何构建对象,还包括继承.方法重载和数据封装等内容.一.模块简介    模块(module)就是Perl包(pachage).Perl中的对象基于对包中数据项的引用.(引用见第x章引用).详见http:

凭什么要用面向对象编程(补充)

接上篇 面向对象重要设计原则概述 ★2007-10-02  08:00 小菜在家中准备小菜开始准备给人家讲座的内容,一开始都很顺利.可是当要把不同的验证方式给细化时,发现了问题.  24 原有的接口实现关系图 如果要再把是用户名密码验证,还是指纹验证的代码加进来,应该如何写具体的实现类呢?  25 SqlServer实现类改造此时你会发现,如果要实现这个功能,你必须在你的每个实现类中写出上面的判断语句,如果某一天要增加一种数据访问(比如MySql)你就得再写一遍类似的代码,如果某天增加一个用户验

Perl中的面向对象编程

一.模块简介 模块(module)就是Perl包(package).Perl的对象基于对包中数据项的引用. 在用其它语言进行面向对象编程时,先声明一个类然后创建该类的对象(实例),特定类所有对象的行为方式是相同的,由类方法确定,可以通过定义新类或从现存类继承来创建类. 类是一个Perl包,其中包含提供对象方法的类: 方法是一个Perl子程序,类名是其第一个参数: 对象是对类中数据项的引用. 二.Perl中的类 一个Perl类是一个包.Perl5用双冒号(::)来标识基本类和继承类(之类). Pe

面向对象编程,类和对象

面向对象编程,类和对象 一.面向对象 1.什么是面向对象 ? 面向对象是一种编程思想,是前辈们总结出的经验,指导程序员如何编写出更好的程序 , 核心是对象,程序就是一系列对象的集合, 程序员负责调度控制这些对象来交互着完成任务. 2.几个案例 案例1:把大象装进冰箱 ? ? 面向过程: ? 1.打开冰箱 ? 2.装入大象 ? 3.关闭冰箱 ? 面向对象: ? 找个具备装大象的技能的对象 总结:在面向对象中程序员的角度发生改变,从具体的操作者变成了指挥者 强调:对象不是凭空产生的,需要我们自己设计

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数.抽象类.虚析构函数.动态创建对象 一.纯虚函数 1.虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 2.如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 3.在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 4.定义纯虚函数: class <类名> { virtual <类型> <函

C++ Primer 学习笔记_65_面向对象编程 --概述、定义基类和派生类

面向对象编程 --概述.定义基类和派生类 引言: 面向对象编程基于的三个基本概念:数据抽象.继承和动态绑定. 在C++中,用类进行数据抽象,用类派生从一个类继承另一个:派生类继承基类的成员.动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数. 继承和动态绑定在两个方面简化了我们的程序:[继承]能够容易地定义与其他类相似但又不相同的新类,[派生]能够更容易地编写忽略这些相似类型之间区别的程序. 面向对象编程:概述 面向对象编程的关键思想是多态性(polymorphism)

C#学习笔记(六)&mdash;&mdash;面向对象编程简介

一.面向对象编程的含义 *   是一种模块化编程方法,使代码的重用性大大的增加. *   oop技术使得项目的设计阶段需要的精力大大的增加,但是一旦对某种类型的数据表达方式达成一致,这种表达方式就可以沿用下去,直到这款应用的生命周期结束. (一)对象的含义 1.对象就是OPP应用程序的一个组成部分,这个组成部件封装了部分应用程序,这部分程序可以是一个过程.一些数据或一些更抽象的实体.对象的类型在OOP中有个特殊的名称叫做类.可以使用类来定义一个对象. PS:术语"类"和"对象