# 2021-12-11 2021-12-14 2021-12-15
1、面向对象
类的组成由属性和方法组成,属性可以称为成员变量,方法可以称为成员函数。
面向对象的本质是:以类的方式组织代码,以对象的形式组织(封装)数据。
三大特性:封装、继承、多态
2、方法的定义及调用
值传递和引用传递:
值传递:
实参传递给形参的值,实参和形参在内存上是两个独立的变量,对形参的修改不会影响实参的值。
引用传递:
实参传递给形参的是堆内存上引用的地址,形参和实参在内存上指向的是同一地址,对形参的改变会影响实参。
值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
3、对象的创建,类和对象
类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。
可以一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的。
转载:https://blog.csdn.net/wei_zhi/article/details/52745268
(1)创建与初始化
- 使用 new 关键字创建对象。使用new创建的时候,除了分配内存空间外,还会给创建好的对象,进行默认的初始化以及对类中的构造器的调用。
- 类中的构造器也称构造方法,是在进行创建对象时候必须调用的,构造器两个特点:
- 必须和类的名字相同
- 必须没用返回值,也不能写void
alt+insert 一键生成构造器
4、三大特性
(1)封装
属性私有、get/set
实现Java封装的步骤:
- 1. 修改属性的可见性来限制对属性的访问(一般限制为private)
- 2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问
封装的优点
-
1. 良好的封装能够减少耦合。
-
2. 类内部的结构可以自由修改。
-
3. 可以对成员变量进行更精确的控制。
-
4. 隐藏信息,实现细节。
(2)继承
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类(派生类)继承父类(基类)的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
不支持单继承。
类的继承格式
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类 { } class 子类 extends 父类 { }
Object类是所有类的父类。一个类都会直接或者间接的继承自该类。
方法的重写
转载:https://www.runoob.com/java/java-override-overload.html
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
方法的重写规则
-
参数列表与被重写方法的参数列表必须完全相同。
-
返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
-
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
-
父类的成员方法只能被它的子类重写。
-
声明为 final 的方法不能被重写。
-
声明为 static 的方法不能被重写,但是能够被再次声明。
-
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
-
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
-
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
-
构造方法不能被重写。
-
如果不能继承一个类,则不能重写该类的方法。
(3)多态
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态是方法的多态,属性没有多态。
参考多态:https://www.cnblogs.com/xuanlin666/p/10857255.html
static、final、private修饰的方法不能使用多态。