面向对象
面向对象
面向对象编程是一种编程范式或编程风格,以类或对象作为组织代码的基本单元。
一、四大特性
1、抽象
通过抽象,即从具体的实例中抽取共同的性质形成一般的概念。具体的概念包括方法、对象和类等。
2、封装
信息隐藏、数据访问保护。Java通过4种访问控制权限符来实现封装。
关键字 | 最大访问范围 | 备注 |
---|---|---|
private | 类本身访问 | 开发中经常将成员变量设置private,通过getter、setter方法进行访问 |
default | 同一个包下的所有类 | - |
protected | 不同包下的子类 | - |
public | 项目中的所有类 | - |
3、继承
is-a的关系。子类继承父类的属性和方法,同时还可以增加子类自己独有的属性和方法。
Java中,Object类是所有类的父类,其他类直接或间接地继承自Object类。
4、多态
多态指同一个操作被不同类型的对象调用时会产生不同的行为。
在Java中,多态需要子类重写父类方法。同时,创建父类引用指向子类对象。
二、类、对象
1、类
类:作为定义对象的模板可以创建对象,是抽象的。类中封装了一类对象的状态和方法。
2、对象
对象:作为事物本身存在,是具体的。对象通常作为类的实例而存在,在创建时会有自己的成员变量。
三、关键字
1、this、super
(1)this
-
属性:主要用于解决属性重名问题。
重名主要发生在: ① 属性名与形参名、② 属性名与局部变量名。重名时,需要访问属性,加上
this.
修饰。 -
方法:一般省略不写。修饰同一个类中,方法之间的互相调用。
-
构造器:同一个类中的构造器之间相互调用,必须放在第一行。
(2)super
在子类的方法中,可以通过使用super.属性
和super.方法
方式,显示调用父类提供的属性和方法。通常,可以省略super.
。当子类存在于父类重名的情况,就必须加上super.
。
super()
:调用父类的空参构造器【其实平时写的构造器中第一行就是super(),一般省略不写。类似于没有含参构造器且不写空参构造器的情况,super()也是分配的】。super()必须写在第一行,所以和this()二者不能显示并存。
2、static、final、instanceof
(1)static
用关键字static修饰的称为类方法/静态方法,不用static修饰的成为实例方法。一个类中的方法可以互相调用:实例方法可以调用该类中的实例方法或类方法;类方法可以调用该类的类方法,不能调用实例方法。
(2)final
-
使用关键字final修饰的成员变量就是常量,一般使用大写字母命名。
常量不占用内存,即在声明常量时必须进行初始化。对象只能调用常量,不能修改它的值。
-
使用关键字final修饰的方法,不能被子类重写
-
使用关键字final修饰的类,不能被继承【final类不能被继承,类中方法就不能被重写,此时方法上的final就可以省略不写】
(3)instanceof
在重写equals方法时,会用来判断某个对象是否是一个类的对象。
四、类与类之间的关系
1、类与类之间产生关系的情况
a. 一个类作为另一个类中方法的形参;
b. 一个类作为另一个类的属性。
2、关系
a. 继承关系
一个类继承另外一个类的功能,同时可以增加自己新功能。
Java中通过extends
标识。
b. 实现关系
一个类实现接口interface的功能。
Java中通过implements
标识。
c. 依赖关系
一个类使用到另外一个类。这种使用关系具有临时性和偶然性,但被使用的类会影响到该类。
代码中,体现在一个类作为参数被某个类在自己的方法中使用。
d. 关联关系
强依赖关系。关系比依赖更强,不存在临时性和偶然性,一般是长期的,而且双方的关系一般是平等的。关联可以是单向的,也可以是双向的。
代码中,体现在一个类作为某个类的属性,或者是某类引用了一个类的类型全局变量。
e. 聚合关系
关联关系的特例,体现整体与部分的关系,has-a
关系。部分与整体之间是可分离的,可以具有各自的生命周期。
代码中,与关联关系一致,只是在语义层面有区分。
f. 组合关系
关联关系的特例。体现的是contains-a
的关系,这种关系比聚合更强,也称为强聚合。整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。
代码中,与关联关系一致,只是在语义层面有区分。