面向对象
概念:关注现实存在的事物的各方面的信息,从对象的角度出发,根据事物的特征进行程序设计
对象:用来描述客观事物的一个实体(万物皆对象,真实存在)
类:具有相同属性(有什么)和方法(做什么)的一组对象的集合(抽象的概念,是对类型的描述)
通常先定义类,再实例化为对象
例:
类、属性和方法
定义类
创建并引用对象
声明对象:类名+对象名;【在内存的栈中开辟空间,为null】
实例化对象:new 构造方法();【在内存的堆区域里开辟空间,完成属性赋值等操作】
通过“=”将声明和实例化操作连接,经过赋值操作,将堆空间中的地址传递到栈中的内存空间里
成员属性默认初始值
面向对象编程三大重要特征:封装、继承、多态
构造方法
1.构造方法与类同名且没有返回值
2.只能在对象实例化的时候调用
3.一个类中可以有多个构造方法---构造方法重载
4.当没有指定构造方法时,系统会自动添加无参的构造方法
5.当有指定构造方法,无论是有参、无参的构造方法,都不会自动添加无参的构造方法
this关键字
this:当前对象的默认引用
this的使用:
调用成员属性,解决成员属性和局部变量同名冲突
放在构造方法的第一条
封装
一、什么是封装
1、通过该类提供的方法来实现对隐匿信息的操作和访问
2、隐藏对象的信息
3、留出访问的接口
二、特点
1、只能通过规定的方法访问数据
2、隐藏类的实例细节,方便修改和实现
三、如何封装
1、修改属性的可见性(设为private)
2、创建getter/setter方法(设为public用于属性的读写)
3、在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)
步骤1为【隐匿对象】,步骤2和3为【留出接口】
包
一、作用
1、管理java文件,进行多文件的数据管理,用包进行项目功能的分块管理
2、解决同名文件冲突
二、语法
package + 包名
注意:
1、必须放在java源文件中的第一行
2、一个java源文件中只能有一个package语句
3、包名全部英文小写
4、命名方式:域名倒序+模块+功能
三、导入包
语法:
import 包名.类名;
例:
导入包中全部类:
import com.imooc.*;
导入包中指定类:
import com.imooc.animal.Cat;
Static关键字
1、static+属性 —— 静态属性、类属性
2、static+方法 —— 静态方法、类方法
3、static+类 —— 不存在静态类
4、static+方法内局部变量 —— 不存在方法中的静态局部变量
5、static+代码块 —— 静态代码块
注:代码块分为,普通代码块、构造代码块、静态代码块
注意问题
1、静态成员的生命周期
类加载时产生,销毁时释放,生命周期长
2、静态方法中的成员调用
静态方法中可以直接访问类中的静态成员,不能直接访问类内的非静态成员
若想访问非静态成员,只能通过对象实例化后,用对象的形式进行访问
3、各种代码块的执行顺序
静态代码块只执行一次,构造代码块在每次对象实例化的时候调用
普通代码块在每次调用方法的时候顺序调用
继承
一、概念
1、一种类与类之间的关系
2、使用已存在的类的定义作为基础建立新类
3、新类的定义可以增加新的数据或新的功能,也可以用父亲的功能,但不能选择性地继承父亲
4.满足A is B则可以使用
二、特点
1.利于代码复用
2.缩短开发周期
三、语法
1.使用extends实现封装(子类 / 派生类 extends 父类 / 超类 / 基类)
2.单一继承,只能有一个父亲
四、继承后的初始化顺序
父亲静态成员 -》 子类静态成员 -》 父亲对象构造 -》 子类对象构造
super
作用:父亲成员方法,父亲属性,父亲构造方法
特点:
1、子类的构造的过程中必须调用其父亲的构造方法,默认调用无参的构造方法
2、如果子类构造方法中既没有显式标注,而父亲又没有无参的构造方法,则编译错误
3、使用super调用父亲指定构造方法,必须在子类的构造方法的第一行
this:当前类对象的引用 | super:父亲对象的引用 |
访问当前类的成员方法 | 访问父亲的成员方法 |
访问当前类的成员属性 | 访问父亲的成员属性 |
访问当前类的构造方法 | 访问父亲的构造方法 |
不能在静态方法中使用 | 不能在静态方法中使用 |
super和this的对比
方法重写 | 方法重载 |
在满足继承关系的子类中 | 在同一个类中 |
方法名、参数列表与父亲相同 | 方法名相同 |
返回值小于等于父类(既可以是子类) | 参数个数、顺序、类型不同 |
访问修饰符的限定范围大于等于父亲方法 | 返回值类型、访问修饰符任意 |
方法重写和方法重载对比
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
private | ok | |||
默认 | ok | ok | ||
protected | ok | ok | ok | |
public | ok | ok | ok | ok |
访问修饰符
Object类
1.Object类是所有类的父亲
2.Java中的每个类都可以使用Object中定义的方法
equals()
toString()
final
1.修饰类表示不允许被继承
2.修饰方法表示不允许被子类重写
3.修饰的方法可以被继承
4.修饰变量表示不允许修改
5.引用类型的变量:初始化之后不能再指向另一个对象,但指向的对象的内容是可变的
6.可配合static使用
注解
可声明在包、类、属性、方法、局部变量、方法参数等的前面,用来对这些元素进行说明、注释。
按照运行机制分:
1.源码注解
2.编译时注解
3.运行时注解
按照来源分:
1.来自JDK的注解
2.来自第三方地注解
3.我们自己定义的注解