面向对象 知识总结
01 什么是面向对象 / 面向过程
- 面向过程:就是对一件事情的步骤进行逐步实现,可以用于解决较为简单的问题。举个例子,假设我要出门,第一步要先离开位子,第二步要穿鞋,以此类推。这就是对一件事情过程的记录,也就是面向过程的解决方案。但如果我要造一架飞机,我无法一步一步实现,而是要先进行规划,对飞机的整体架构进行了解,将飞机分为多个大部件,然后逐步细化,最后才到动手制造。这就引出了面向对象这个概念。
- 面向对象:所谓面向对象,就是对事物在明确需求后进行分析,逐步拆分形成模块化。在大型项目中,便于明确各个人员的分工,提升效率。哪怕是细化后的任务内容,仍需要使用面向对象的思想,这有利于代码的规范化,提高可拓展性。
注释
以下的内容仅针对与个人理解,还有一部分基础知识没有总结,后续将补充。
02 封装
- 这里的封装主要是讲的
public
与private
的关系,顾名思义pulic就是公有的意思,private即私有。当给一个变量赋予不同的属性,这个变量就有不同的效果。 - 给public属性赋值后能成功输出,但给private赋值则会报错,因为私有属性是无法在外部获取。
但也有一些方法,如提供public的get/set的方法。
公共方法则可以被调用,调用公共方法时,公共方法位于私有变量内部,可以对私有变量进行赋值以及获取。
代码进行封装(设为私有),在外部就无法知道内部代码是如何运作的,提高了代码的安全性以及规范性。
03 类的继承
- 继承是类中很重要的一个属性,首先要有子属性与父属性的概念。
继承属性的使用方法是在对象名后加上
extends
以及继承对象名
,也就是继承的意思。继承后,就能使用继承对象(父项,后面统称为父项)中的内容。这里对在Person类中进行一些简单的赋值。
在继承父项后,子项就能使用父项的公有方法以及公有属性。
继承也涵盖的封装的内容,无法使用私有内容,如需使用需要设置get/set的公有方法。
04 Super方式的使用
- super的使用方式与继承相同,是继承的一种特有表现,用于显示父项的属性。
- 这里可以看到使用了
this
与super
有着不同的效果。
当一个类其继承的父类与本身都具有同一属性时,不加super会默认使用本身的属性。
以上表述同样可以用于方法的继承。
05 方法重写
- 当一个类不想使用其父类的继承方法而想自己重新编写时,无需更改父类方法,通过方法重写即可重写编写方法。
使用场景,如子类也想使用run这个方法,但想使run方法执行其他命令,这里就可以使用方法重写。command + N 即可
06 多态
多态时用来体现类与类的继承关系,比如
图中的Stu类属于Person类,Person类属于Object类。
子类可以调用父类的属性,但父类无法调用子类的属性。
就像这里Object类中没有test方法,test方法是Stu中的,因此无法调用需要进行类型的强制转换。多态这个概念只存在于方法,不存在于属性。
07 instanceof与类型转换
- instanceof 这个方法用于判断两个类的关系,比如Stu继承与Person,他们都继承与Object,这就说明Object与二者都有关系,Stu与Person有关系。Object与String有关系,但String与Stu、Person都无关系。
- instanceof 返回是bool类型
类型转换,就是在变量前加上转换类型即可。
这里就是对s2进行了类型的强制转换为Stu类型,这样就能够使用Stu中的方法。
08 static关键字详解
- static顾名思义就是静态的意思,他会在调用这个对象时就进行创建生成。
设置为static后,在调用类时就可以直接使用。
未设置static的变量则无法直接使用,需要通过生成对象后才能调用。
static方法的生成优先等级 > 匿名方法 > 构建方法
09 抽象类
- 抽象类 就是在使用了
abstract
后,就变成了必须要先重写代码才能使用的一种定义类的方法。 - 抽象类是一种灵活的类,可以在里面只定义接口,不写方法,也可以在里面写方法。但这样规范化不严谨,没有接口类实用。
抽象类被继承时,其抽象方法必须被重写。
或者将该类也定义为抽象类。
这里可以看到在重写抽象方法后,就可以调用抽象类。
抽象方法必须通过抽象类来存放,抽象类中可以不包含抽象方法。
10 interface 接口类
- 接口类就是一种比抽象类更为绝对的类,接口类只能用于定义参数,无法进行实现。这是面向对象编程的最重要的方式之一。就像开始说的,要先对事物进行分析、细化,然后才是实现。在分析、细化后,就将各个部分写成接口类,依照接口类的需求来实现方法。这就是面向对象编程。
接口类定义利用
inferface
来定义,只需要编写相应的需求参数。然后建立一个带Impl后缀的Java文件,在该文件中实现刚刚写好的接口。
这里报错的原因就是没有重写接口,当我们将接口重写后,这个接口类就完成了。
需求参数也和我们定义的接口类一致,这就是接口类的具体使用,也是我们面向对象编程的核心思想。
总结
写得比较仓促,将今天学的Java面向对象编程的基础复盘了一下。还有很多地方没写清楚,后续还会关系。