今日内容
* 编程思想
* 什么是面向对象【理解】
* 三大特征【掌握】
* 访问权限修饰符【掌握】
* 类与对象
* 概念【理解】
* 类的定义与使用【掌握】
* 类和对象的关系【理解】
* 对象的内存图【理解】
* 封装
* 封装的概念【理解】
* 封装的书写
* 访问权限修饰符【掌握】
* this关键字的使用【掌握】
* 构造方法
* 构造方法的概念
* 构造方法的重载【掌握】
* 构造方法的特点
* 标准JavaBean的编写【掌握】
* 继承
* 继承的概念【理解】
* 继承的特点
* 继承的书写
* 继承中成员的访问
* 重写 【掌握】
* 继承数据存储的原理【理解】
* super关键字的使用【掌握】
* 抽象类
* 抽象类的概念【理解】
* 抽象类与抽象方法的书写【掌握】
* 抽象的注意事项【掌握】
一、编程思想
01.什么是面向对象编程
- 面向对象编程,简称JavaOOP。是在计算机程序设计过程中,参照现实中的事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想
- 面向对象编程强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
- 在代码书写时更注重代码的扩展性与可重用性。
02.什么是面向过程编程
面向过程編程注重编程的过程对于代码编写流程进行书写,在代码书写时,对每一个步骤都去完成。
03.面向对象编程的三大特征
封装:
- 对类隐藏内部执行代码与数据细节,提供公开简单的方法进行使用。
- 封装主要有方法的封装和类的封装:
①方法的封装就是将多行代码封装成方法,使用方法名进行标识使用;
②类的封装就是将属性与方法封装成类,为指定的类创建对象提供属性和行为。- 现在的封装指的最多地是对属性的封装,使用private关键字对属性进行修饰使其只对当前类可见,提供公开的方法进行访问,大大地提高了系统的安全性。
继承:
- 就是子类继承父类非私有的属性和方法,使得子类对象具有与父类相同的属性、相同的方法。子类可以直接访问父类中的非私有的属性和方法。
- 继承描述的是事物之间的所属关系。
多态:
- 一个父类不同的子类形态,就不同的形态决定代码调用与执行
- 多态是同一个行为具有多个不同表现形式或形态的能力。
二、类与对象
0.1 概念
- 类
类是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
属性:就是该事物的状态信息;在类中通过成员变量来体现。
行为:就是该事物能够做什么;在类中通过成员方法来体现。
- 对象
对象是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
02.为什么要用类
Java面向对象编程,但是不是所有的对象都提供,有时需要我们自己进行对象的定义,但是对象太过指定,太多我们无法将全部对象书写,并且在使用时我们也不会使用全部对象,我们使用类进行代表这些对象。
03.类的定义与使用
类由类名与类体组成,类体中包括成员变量和成员方法。
修饰符 class 类名{
类体
//成员变量
//成员方法
}
创建对象
类名 对象名 = new 类名();
访问类中的成员
//属性赋值
//如果在声明属性时没有赋值,在创建时会使用对应属性的默认值进行赋值
对象名.成员变量 = 属性值;
//获取成员变量属性
对象名.成员变量;
//获取成员方法
对象名.成员方法(参数);
04.类与对象的关系
①类是对一类事物的描述,是抽象的
②对象是一类事物的实例,是具体的
③类是对象的模板,对象是类的实体
05.对象的内存图
三、封装
01.封装的概念
- 对类隐藏内部执行代码与数据细节,提供公开简单的方法进行使用。
- 封装主要有方法的封装和类的封装:
①方法的封装就是将多行代码封装成方法,使用方法名进行标识使用;
②类的封装就是将属性与方法封装成类,为指定的类创建对象提供属性和行为。- 现在的封装指的最多地是对属性的封装,使用private关键字对属性进行修饰使其只对当前类可见,提供公开的方法进行访问,大大地提高了系统的安全性。
02.封装的书写
- 使用
private
关键字来修饰成员变量。- 对需要访问的成员变量,提供对应的一对
getXxx
方法 、setXxx
方法。
03.访问权限修饰符
用于修饰类、成员变量、方法的关键字,用于设置其使用范围(可见性)
public
: 公开的:安全性最低
空格
: 默认,如果没有书写访问权限修饰符会默认添加
protected
: 受保护的
private
: 私有的
①修饰类
只能使用默认以及public(一般用public)
默认是当前类以及当前包下其他类可用,类如果是私有的只有当前类能用,那么久没有意义
②修饰变量:
可以使用任意访问权限修饰符进行修饰(一般使用private)
只能用于成员变量
③修饰方法
可以使用任意访问权限修饰符进行修饰(一般使用public)
因为方法执行方法体书写可以进行逻辑书写,所以一般除核心方法不会进行私有
如果书写私有方法 那么在当前类其他方法中一定调用
04.this关键字的使用
在进行方法书写时,进行标识符命名时如果符合见名知意,会出现与属性名同名的情况(不同作用域),java默认就近原则,当获取变量值时,默认使用近的变量进行获取,这个时候去需要使用this关键字,将当期对象属性与方法执行传入的变量相区分
this
:指代当前对象,书写在方法中,那个对象调用该方法 this指代的就是哪个对象
方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。
四、构造方法
01.构造方法的概念
构造方法又称构造函数、构造器,在使用new关键字创建方法时,由JVM调用根据传入的参数创建对象并对属性进行赋值。不管是否自定义构造方法,所有的类都有构造方法,因为Java自动提供了无参数构造方法;一旦自己创建了构造方法后,提供的无参构造方法就会失效。
02.构造方法的重载
构造方法虽然与普通方法存在区别,但是也可以实现方法的重载,只不过由于构造方法执行的特点,所以构造方法重载,一般指的是参数个数不同。
03.构造方法的特点
①构造方法没有返回值
②构造方法的方法名就是类名
③所有的类都有构造方法,如果在代码书写中没有显式定义构造方法,那么在编译时jvm会自动添加一个无参构造方法
④如果类中书写了任意构造方法,那么不会在提供无参构造方法
04.标准JavaBean的编写
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法【建议】
//成员方法
//getXxx()
//setXxx()
}
五、继承
01.继承的概念
继承就是子类继承父类非私有的属性和方法,使得子类对象具有与父类相同的属性、相同的方法。子类可以直接访问父类中的非私有的属性和方法。继承描述的是事物之间的所属关系。
02.继承的特点
- Java中的继承是单继承(一个子类只能拥有一个父类,但是一个父类可以拥有多个子类)
- 继承关键字书写在子类
- 子类可以继承父类非私有的属性与方法
- 子类可以书写额外的属性与方法
- 类与类之间产生了关系,是多态的前提。
03.继承的书写
在java书写过程中两个类之间的关系使用关键字进行设置,在子类中通过 关键字设置当前类继承的父类。
class 子类 extends 父类 { ... }
04.继承中成员的访问
-
成员变量的访问
- 成员变量不重名
1、如果子类中没有与父类相同的属性,那么在使用时使用父类的属性。
2、在子类继承父类后,如果子类拥有相同的属性那么在使用时,默认使用子类的属性,方法也是一样。 - 成员变量重名
如果子类中有与父类相同的属性(在继承中一般不这样书写)
- 成员变量不重名
-
成员方法的访问
- 成员方法不重名
如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。 - 成员方法重名(方法重写 Override)
1、 方法重写: 子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。
2、方法重写的要求: 修饰符访问范围大于或等于父类 返回值不能修改 方法名不能修改 参数列表不能修改 方法体根据需求修改。
3、@Override
:重写注解,无特殊功能,用于标识重写的方法,被该注解标识的方法必须满足方法重写的语法规则。
- 成员方法不重名
05.override与overload的区别
- overload:方法重载
在一个类,方法名相同参数列表不同称发生了方法的重载,或多个方法互为重载
参数列表不同:个数不同、类型不同、顺序不同- override:方法重写
发生继承过程中,子类重写继承父类方法,称之为重写- 区别:
①发生位置不同:重载一般发生在同一类中,重写发生在继承中
②书写语法不同:重载只需要方法名与参数列表就可以发生,重写返回值、方法名、参数列表必须与父类相同
06.继承数据存储的原理
子类在创建时,只会根据当前子类拥有的属性开辟内存空间存储对应数据,在程序执行中在创建子类时首先都会创建一个与之唯一对应的父类对象(子类构造方法第一行调用父类构造方法),在进行存储时,如果存储子类没有的属性,实际上是存储到了与之相对应的父类对象中
07.super关键字的使用
所有的类都有父类,如果书写了关键字继承父类 那么指定的父类就是其父类,如果一个类没有书写父类那么默认继承Object(基类 超类)
super代表父类
在进行变量与方法执行时,如果子类拥有与父类相同的变量与方法,那么默认会调用子类的,如果想获取执行父类的变量与方法需要使用super关键字进行标识
this.成员变量 ‐‐ 本类的
super.成员变量 ‐‐ 父类的
this.成员方法名() ‐‐ 本类的
super.成员方法名() ‐‐ 父类的
在子类中,子类构造方法会默认调用父类无参构造方法,创建父类对象,并且子类构造方法调用父类构造方法的语句必须书写在子类构造方法的第一行
08.this和super关键字的区别
- this:当前类中方法声明的形参与成员变量相同时,使用this关键字标识成员变量
- super:在继承过程中子类属性方法与父类属性方法相同时,使用super关键字标识父类属性与方法
- this与super都可以调用构造方法
this(...) ‐‐ 本类的构造方法
super(...) ‐‐ 父类的构造方法
六、抽象类
01.抽象类的概念
父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。
02.抽象类与抽象方法的书写
使用abstract关键字对类与方法进行修饰,被其修饰的类称之为抽象类,方法称之为抽象方法
一个类如果有抽象方法,那么这个类一定是抽象类,如果一个类是抽象类不一定拥有抽象方法
03.抽象的使用
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该父类所有的抽象方法,否则,从最初的父类到最终的子类都不能创建对象,失去意义。
04.抽象的注意事项
-
抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
-
抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
-
抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
-
抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类
理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。
温故而知新,可以为师矣
每日一点点进步
不进则退