面向对象
什么是面向对象
面向对象与面向过程
-
面向过程
- 自顶而下的编程模式:将一个问题分解成一个一个步骤,每个步骤使用函数实现,再依次调用这些函数,解决这个问题
-
面向对象
- 将事务高度抽象化的变成模式:将一个问题分解成一个一个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之间的调用,组合解决问题
三大特征
-
封装
- 把客观事物封装成抽象的类,类可以让自己的成员被自己信任的其他类或者对象操作,对于自己不信任的可以将自己的成员信息进行隐藏
-
继承
- 继承是指一种可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展的能力(实现继承和接口继承)
-
多态
- 一个类的实例的相同方法,在不同场景下有不同的表现形式
五大基本原则
-
单一职责原则
- 一个类最好只做一件事,只有一个引起他的变化原因(高内聚,低耦合)
-
开放封闭原则
- 软件实体是可扩展而不可修改的(对扩展开发,对修改封闭)
-
Liskov替换原则(里氏替换原则)
- 子类必须能替换(代替)其父类。子类可以扩展父类的功能,但不能改变其功能
-
依赖倒置原则
- 依赖抽象。上层模块不应该依赖底层模块,它们都应该依赖于抽象;抽象不依赖于具体,具体依赖于抽象
-
接口隔离原则
- 使用多个专门的接口比使用单一的总的接口要好
封装、继承、多态
什么是多态
-
同一操作,作用于不同对象,可以有不同的解释,产生不同的操作结果(运行期状态)
-
多态的三个条件
- 有类继承或接口实现
- 子类重写或实现父类方法
- 父类的引用指向子类
方法重写与重载
-
重载
-
方法名字相同,方法参数列表不同
- 参数个数
- 参数类型
- 多个不同类型参数的顺序。eg:(int String)和(String int)
-
编译期绑定
-
-
重写
-
在继承关系中,子类拥有和父类中方法名相同,参数相同的方法的情况
- 方法名相同
- 参数列表相同
- 返回值相同
- 重写方法的访问限制级别不能比被重写方法强。eg:父-protected,子-protected或者public
- 重写方法不能抛出比被重写方法更加广泛的异常
-
运行期绑定
-
Java的继承与实现
-
继承
- 如果多个类的某个部分的功能相同,则可以将共同部分抽象出来成一个父类,这多个类共同继承这个父类
-
实现
- 如果多个类的处理目标相同,但是处理方式不同,则定义一个接口标准,让他们都实现这个接口标准,各自使用各自的方式达成相同的目标
Java的继承于组合
-
两种方式的目的都是提高代码的复用性(第三种提高代码复用性的是代理)
-
继承
-
联结类于类的层次模型,子类可以扩展父类的功能,子类和父类是 is-a 的关系
- 编译期确定关性,白盒式代码复用,子类需在编写代码时指明其继承的父类
- 子类自动继承父类接口,创建子类实例时,无需创建父类实例
-
-
组合
-
整体与部分的关系(拥有的关性),组合的类之间是 has-a 关性
- 运行期确定关性,黑盒试复用,面向接口编程中,只有运行时才能确定调用的是哪一个具体实现
- 松耦合,动态组合,较好的扩展性
-
-
当确认类之间的关系真的是一个is-a时,再选择使用继承
构造方法与默认构造方法
-
构造方法
- 一种特殊的方法,主要用来创建实例时,对实例进行初始化,支持重载,不会被继承(不能被重写)
-
默认构造方法
- 在一个可实例化的类中,没有专门编写一个构造方法时,多数编程语言会使用一个缺省构造器,这个构造器一般情况会将值类型赋值为默认值在,将引用类型赋值为null(Java为例)
类变量,成员变量与局部变量
-
类变量
- 存放方法区(类中静态变量)
-
成员变量
- 存放堆内存
-
局部变量
- 存放栈内存
成员变量和方法的作用域
-
修饰方式:private,protected,public,不写
- private:私有的。只有当前类对private修饰的成员变量和方法具有访问权限
- protected:受保护的。当前类,同一包下其他类以及其子类对protected修饰的成员变量和方法具有访问权限
- public:公开的。所以类和对象可见,对其具有访问权限
- 不写:默认权限。当前类以及同一包下的其他类,对其具有访问权限
平台无关性
如何实现平台无关性
-
平台无关性
- 一种语言在计算机上运行不受平台的约束,一次编译,到处运行。
-
实现
-
语言规范,class文件,jvm
- 通过规定Java语言中基本数据类型的取值范围和行为
- 所有Java文件要编译成统一的class文件
- jvm将class文件转换成对应平台的二进制文件
-
.java->.class为前端编译(javac),.class->0-1机器码为后端编译(jvm)
-
jvm支持的其他语言
- Kotlin
- Groovy
- Scala
- Jruby
- Jython
值传递
值传递与引用传递
-
形参和实参
- 形参:定义函数名和函数体时所使用的参数,接收调用该函数时传入的实际参数
- 实参:在调用有参函数时,调用函数传递给被调函数的实际参数
-
值传递与引用传递
- 值传递:在调用函数时,将当前参数复制一份传递给被调函数,被调函数对该复制出来的数据进行修改,不会影响调用函数中的数据
- 引用传递:在调用函数时,直接将参数的地址传递给被调函数,此时被调函数对该地址所指向内存的数据进行修改,会影响调用函数的数据
Java只有值传递
- 了解即可。传递对象是传递的引用地址,并不是真实的一个内存地址,这个引用地址,可以看作是一个值类型
关注公众号【爱做梦的锤子】后台回复【java知识点】可下载我整理的完整版思维导图
网友评论