面向对象是一种代码编程思维,天天都在使用。必须灵活掌握

标准类、类和对象

标准类/Java bean:成员变量、方法、

JavaBean的四个组成部分:

  1. 所有的成员变量都要使用private关键字修饰
  2. 为每一个成员变量编写Getter/Setter方法
  3. 编写一个无参数的构造函数
  4. 编写一个全参数的构造函数

成员变量和局部变量的区别:

  • 我是谁?(我有默认值)我在哪?(Heap)我要到哪去?(随对象而去)
  • 成员变量在堆内存里(new 在堆里),生命周期:随对象而消失,有默认初值
  • 局部变量在方法区(Stack栈里),随方法调用完毕就消失,无初值必须赋值之后才能使用

类,面向对象OOP

什么是面向对象编程?

“面向对象编程”(Object Oriented Programming,缩写为OOP)是目前主流的编程范式。其核心思想是将真实世界中各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。

什么是类?

类就是群体(模板),具备实例对象的向上抽象涵义。例如人类就是类,每个人向上所属都是属于一个共同的类——人类;实例是具体的对象,人就是人类的实例化/对象

类变量:

  • 类变量定义count可以给实例对象编号,因为类变量是共享的。
  • 类变量不可以保存全部实例的个数(实例可能会在程序执行的过程中被销毁)

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

封装性

方法是种封装,类也是一种封装

    • 成员变量都是隐藏在内部的,外界无法直接操作(Private)
    • 外部程序不能直接访问变量,只能由类提供给外部的公开方法去访问。访问器【setXxx && getXxx】保护成员变量,方法内设置赋值条件以保证参数的合理性
    • 多次使用:我们在使用封装性的时候,要清楚自己封装的东西作用是什么,将方法封装好了之后可以在同一个类不同方法中多次使用,真正才能利用好方法的封装性。

构造方法:

  • 构造方法:构造方法是一种特殊的方法,主要是完成对象的创建和对象数据的初始化。使类具有更好的封装性。(如果不写的话,new了新对象需要单独一行代码给某个属性赋值。)
  • 构造方法:减少代码量,使类具有更好的封装性。
    1. 方法名和类名一样;
    2. 权限修饰符可以是private、public
    3. 没有返回值类型,但是可以返回实例化对象
  • 先调用超类构造函数👉类初始化器在构造方法的前面执行(实例初始化器在)👉本方法

toString方法:

  • “类的自我介绍”
  • 因为在很多直接print类的时候,我们会直接调用类中的toString方法,在类里面重写这个方法可以让外界了解类里面有什么东西。如果没有重写,那么print的时候会调用父类Object中的toString方法,输出的是这个类的哈希码。

继承性:类的共同点

使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法

方法重写

  • 参数所有的东西都要一样
  • 子类不满意合同,所以要重写写一份合同

Tips:

  • 每一个子类构造方法的第一条语句默认都是:super()“父类的无参构造”
  • 父类的私有变量、方法是不可继承的

多态性

三大特性的个人理解:

  • 封装性:类包含了对象的属性和行为/方法:人都有年龄、性别、名字、以及一些隐藏属性:思维高度、金钱、社会关系,(可以看作在类里面用private修饰的成员变量);人可以吃饭、看电视、玩游戏、睡觉、学习,都是人的行为(也就是人类的方法)。将各种人类属性抽象到人类类中,就是类的封装性;
  • 继承性:例如我继承了父类有的功能,他的煮饭方法是公开的,那么我也会。我也可以增加新的方法——打王者荣耀,但是我的父亲不会,没有这个技能;(回顾过去,展望未来,对子类的拓展);
  • 多态性:同样的方法,在不同对象中执行得不一样。(前提:需要有继承、重写、引父new子)

权限修饰符

  • Static修饰的类变量和方法:共享
  • 静态成员方法只能访问静态成员

接口

内部类

  • 一个Java文件有且仅有一个public修饰的类
  • 在包中通用的内部类