面向对象编程
OOP
面向对象和面向过程
对于描述复杂的事务,从宏观上需要面向对象的思路,具体到微观,仍然需要面向过程的思路
- 面向过程——第一步做什么,第二部做什么……
- 面向对象——分类的思维模式
类和对象的关系
- 类——是一种抽象的数据类型,它是对某一类事物的整体描述或定义,不能代表某一个具体的事物
- 对象——是抽象概念的具体实例,能够体现出特点、展现出功能的是具体的实例,而不是抽象的概念
- 使用new()关键字创建对象
使用new关键字创建的时候,除了分配内存空间外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用
类与对象小结
- 类是一个模板(抽象的),对象是一个具体的实例
- 对象的引用
对象是通过引用来操作的(栈—>堆:引用就是指向对象的一个地址) - 对象的创建和使用
- 必须使用new关键字创建对象
- 调用对象的属性和方法通过点“.”
- 类
- 静态的属性(属性)
- 动态的方法(方法)
构造器详解
-
什么是构造器?
构造器通常也叫构造方法、构造函数,是在创建对象时必须调用的
当你new一个对象时,就会调用构造器。构造器格式如下:[修饰符,比如public] 类名 (参数列表,可以没有参数){ //这里不能有return}
-
构造器的特点
一个类即使什么都不写,也会存在一个方法- 必须和类的名字相同
- 必须没有返回类型,也不能写void
-
构造器的作用
- 使用new关键字,必须要有构造器(new本质在调用构造器)
- 用来初始化值(给实例化的对象赋一个初始值)
-
注意事项
一旦定义了有参构造,无参构造就必须显示定义(写出来)
创建对象内存分析
- 方法区:类和方法和常量池
- 静态方法区:static 和类一起加载(所有对象想调用它都可以从堆里直接调)
- 栈:存放调用的方法和引用变量名(new出来的对象)
- 堆:引用变量名指向(相当于内容)
封装
属性私有,get/set
- 高内聚——类的内部数据操作细节自己完成,不允许外部干涉
- 低耦合——尽暴露少量的方法给外部使用
- 数据的隐藏——通常应禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问
继承
- 继承的本质是堆某一批类的抽象,从而实现对现实世界更好的建模(对类再抽象)
- extends(意思是扩展),子类是父类的扩展
- Java中只有单继承,没有多继承
- 继承是类和类之间的一种关系。类和类之间的关系还有依赖、组合、聚合等
- 子类(派生类)继承父类(基类),使用关键字extends来表示
- 子类和父类的关系可看作“子类 is a 父类”(eg:学生是一个人)
- 子类继承父类,就会拥有父类的全部方法
- 在Java中,所有的类都默认直接或间接继承Object
Super详解
- super是调用父类的构造方法,必须在构造方法的第一个
- 只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
- this:调用者自身这个对象,没有继承也可以使用,调用本类的构造
- super:代表父类对象的应用,只有在继承条件下才可以使用,调用父类的构造
方法重写
- 方法名必须相同
- 参数列表必须相同
- 修饰符范围可以扩大,但不能缩小
- 抛出的异常范围可以被缩小但不能扩大
- 重写都是方法的重写,和属性无关
- 父类的引用指向子类
- 静态方法的调用只和定义的数据类型有关
非静态可以重写
多态
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/282512.html