面向对象笔记「建议收藏」

面向对象笔记

大家好,又见面了,我是全栈君。

一.概念
1.面向对象概念:世界万物皆对象。
2.对象的组成:两部分
   a.成员属性 :对象的数据模型,用于描述对象的数据,又称为对象的属性,或者对象的成员变量。
   b.成员方法:对象的行为模型,用于描述对象能够做什么事情,又被称为对象的方法。
3.对象的特点:
        a.每个对象都是独一无二。
        b.对象是一个特定的事物,他的职能是完成特定的功能。
        c.对象是可以重复使用的。
4.什么是面向对象?面向就是编程的时候一直把对象放在心上。
  面向对象编程就是 在编程的时候数据结构(数据组织方式)都是通过对象的结构进行存储
5.为甚魔使用面向对象?
   对象的描述方式更贴合真实的世界,有利于大型业务的理解
   在程序设计的过程中用对象的视角分析世界的时候,能够拉近程序设计与真实世界的距离
6.面向对象的实质:就是把生活中要解决的问题都用对象的方式进行存储(属性 方法)
  对象与对象之间通过方法的调用完成互动(方法)
7.面向对象的基本思路:
   a.识别对象
    任何实体都可以被识别为一个对象
   b.识别对象的属性
    对象里面存储的数据被识别为属性
    对于不同的业务逻辑,关注的数据不同,对象里面存储的属性也不同
   c.识别对象的行为
     对象自己属性数据的改变
     对象和外部交互
7.面向对象的原则:高内聚低耦合
   a.对象内部是高内聚的:该有的都有,不至于缺胳膊少腿
     所有对象相关的内容都封装到对象内部
     对象只负责一项特定的职能(投篮)
   b.对象对外是低耦合的:相互之间依赖关系特别小,程序设计的更灵活,有利于对象的重用
     外部世界可以看到对象的一些属性
二、基本实践
1.类的概念:
       物以类聚,把具有相似特性的对象归类到一个类中
       类定义了这些相似对象拥有的相同的属性和方法
       类的对象称为类的一个实例(Instance)
       类是相似对象的描述,称为类的定义,是该类对象的蓝图或者原型
       类的属性和方法统称为类成员(重要)
       类就是一个框架,对象就是把这框架塞满
2.类的实例化(instantiate):通过类定义去创建一个类的对象,类只有一个,可以实例化出多个对象
  类的定义里面属性值都是空的,而对象的属性都有具体的值
三。高级实践
  1.继承的好处:
    a.父类里面定义的类成员可以不在子类里面重复定义,节约编程的时间和成本。
    b.同一个父类的子类具有相同的父类定义的类成员,因此外部调用它们的时候可以一视同仁
    c.子类可以修改和调整父类定义的类成员:我们成为重写overwrite,一旦子类修改了就按照子类修改后的功能执行
    d.单继承原则:一个子类只能继承一个父类
  2.面向对象的三种访问权限
    public:公有的类成员,可以在任何地方被访问(定义该成员的类即自身,该类的子类,其他类)
    protected:受保护的类成员,可以被其自身及其子类访问
    private:私有的类成员,只能被自身访问
  3.静态属性和静态方法的定义
    静态属性定义时在访问控制关键词后面添加static关键词即可,静态方法同理。如 public static $president=’tom’;
      public static function test(){}.
    访问静态属性:类名::$president  #带 $ 符号 。在类定义中使用静态成员时,用self(或static)::$president
    访问静态方法:类名::test();
    在类定义外部访问静态属性时,我们使用类名::类的静态成员(成员属性,成员方法)。
    使用parent访问父类中的静态成员。
    在类的静态方法中不能使用$this调用类的非静态成员。
    注意:6个
      a.静态属性用于保存类的公有数据
      b.静态方法里面只能访问静态属性
      c.静态成员不需要实例化对象就可以访问
      d.类的内部可以通过static或者self关键词访问自身静态成员
      e.可以通过parent关键词访问父类的静态成员
      f.可以通过类名称在类定义外部访问静态成员
  4.final关键词
    在子类中编写跟父类中方法名称完全一致的方法,可以完成对父类中方法的重写(overwrite)
    a.对于不想被任何类继承的类可以在class之前添加关键字final
    b.对于不想被子类重写(修改)的方法,可以在方法定义的前面加final
  5.数据访问
    a. 用parent关键字可以访问父类中被子类重写了的方法
    b.self关键字可以用于访问类自身的成员方法,也可以用于访问自身的静态成员和类常量,使用常量的时候不需要在常量名称前加 $ 符号,
        不能用于访问类自身的属性(重点)
    c.static关键字用于访问类自身定义的静态成员,访问静态属性时需要在属性前面加 $ 符号
  6.接口
    接口就是把不同类的共同行为进行了定义,然后在不同的类里面实现不同的功能。定义接口:interface,继承接口:implements
    接口里面的方法不需要有方法的实现。
    implements用于表示类实现某个接口。
    实现了某个接口之后,必须提供接口中定义的方法的具体实现。
    接口不能被实例化。
    可以用instanceof关键词判断某个对象是否实现了某个接口.
    可以用extends让接口继承父接口。
    当类实现子接口时,父接口定义的方法也需要在这个类里面具体实现。
    总结:类的方法必须有实现,接口的方法必须为空。
    实现(implements)某个接口  与 继承(extends)某个类区别:
    a:实现接口跟继承类相似,但是接口不能直接创建自己的对象
    b.继承的父类必须有该方法的实现,子类可以重写父类的方法,也可以不重写
    c.接口里面的方法是不需要具体实现的,只要定义了方法的名称和参数就可以了,具体的实现必须在实现类中定义
  7.多态
    相同的一行代码,对于传入接口不同的实现对象的时候,表现是不同的,这就是多态
    因为接口的方法实现可以有很多,所以对于接口里面定义的方法的具体实现是多种多样的,这种特性我们成为多态
  8.抽象类
   接口里面的方法都是没有实现的,而类里面的方法都是实现的
   abstract 关键字用于定义抽象类,如 abstract class ACanEat{}
   在抽象方法前面加abstract关键字,可以表明这个方法是抽象方法,不需要具体实现,abstract public function eat(){}
   在抽象类中可以包含有普通方法,有方法的具体实现
   继承抽象类的关键字是extends, class Humen extends ACanEat{}
   继承抽象类的子类中需要实现抽象类中定义的抽象方法。不需要实现普通方法
四.特殊实践:魔术方法
  1.__tostring: 当对象被当做string使用时,这个方法会被自动调用 echo $obj;会在把对象转换为string的时候自动调用,
  2.__invoke:  当对象被当成方法调用时,这个方法会被自动调用 $obj(4);会在把对象当做一个方法调用的时候自动调用
  3.__call():当对象访问不存在的方法名称时,被自动调用      ——|
  4.__callStatic():当对象访问不存在的静态方法时,被自动调用——|(__call和__callStatic)被称为方法的重载overloading
  属性的重载:(不可访问属性即属性未定义或者没有访问权限如private)
  5.__set():在给不可访问属性赋值时,
  6.__get():读取不可访问属性的值时
  7.__isset():当对不可访问属性调用isset()或者empty()
  8.__unset():当对不可访问属性调用unset()时

  9.__clone():当使用clone关键字赋值对象时

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112253.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 代码浏览工具_图片编辑器网页版

    代码浏览工具_图片编辑器网页版20个最强的基于浏览器的在线代码编辑器1.CompilrCompilr是一个在线编译器和在线IDE。可以用它来开发PHP,C,C++,Ruby。在浏览器中编译Java,C#和VB.net等。马上使用2.Dabblet跨浏览器兼容,对前端攻城师们来说是一个不得不处理的问题。为了在浏览器间呈现统一的显示效果,攻城师们不仅要为每个游览器添加CSS前缀,甚至还…

  • ubuntu上docker卸载重装[通俗易懂]

    ubuntu上docker卸载重装[通俗易懂]清理docker并重装1、删除容器1)首先需要停止所有的容器dockerstop$(dockerps-a-q)2)删除所有的容器(只删除单个时把后面的变量改为imageid即可)dockerrm$(dockerps-a-q)2、删除镜像1)查看host中的镜像dockerimages2)删除指定id的镜像dockerrmiimageid想要删除untaggedimages,也就是那些id为的image的话可以用dockerrmi$(dockeri

  • 《C语言编写 学生成绩管理系统》

    《C语言编写 学生成绩管理系统》

    2021年12月15日
  • python全局变量赋值_Python全局变量和局部变量[通俗易懂]

    python全局变量赋值_Python全局变量和局部变量[通俗易懂]python中,对于变量作用域的规定有些不一样。在诸如C/C++、java等编程语言中,默认在函数的内部是能够直接訪问在函数外定义的全局变量的,可是这一点在python中就会有问题。以下是一个样例。test.py:#!/usr/bin/pythonCOUNT=1deffunc():COUNT=COUNT+1func()Pythontest.py。会执行报错:Traceback(mos…

    2022年10月28日
  • 流行计算机病毒有哪些,现在流行计算机病毒有哪些[通俗易懂]

    流行计算机病毒有哪些,现在流行计算机病毒有哪些[通俗易懂]现在流行计算机病毒有哪些现在流行计算机病毒有哪些现在流行的计算机病毒有很多!你有去了解过吗?下面由小编给你做出详细的现在流行计算机病毒介绍!希望对你有帮助!现在流行计算机病毒介绍一:国家计算机病毒应急处理中心通过对互联网的监测发现,近期出现一种恶意后门程序变种Backdoor_Agent.ADG。该变种运行后,会自我复制到受感染操作系统指定文件夹下,重命名为可执行文件。随后,该变种会释放操作系统中…

  • navicat15 mac激活[最新免费获取]

    (navicat15 mac激活)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~747EFQ8BIF-eyJsaWNlbnNlSWQiOi…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号