面向对象:
面向过程编程:着重点在步骤,强调的是过程,凡事亲力亲为
面向对象:确切的说更像是一个统筹者,站在更高的维度,着重点在结果,谁去做无所谓
把大象装冰箱分三步,面向过程编程更在意的是打开冰箱,把大象装进去,关上冰箱,而面向对象编程在意的是谁来做这三个步骤
类:
指一类事物,在Java中用关键字class来修饰
类是抽象的,一般提取一类事物的共性特征与功能
可理解为图纸,模板
对象:
对象是根据类创造出的一个个具体的实例,一个类可以创建多个不同的对象,我们可以通过对象唯一的地址值来区分
创建对象过程分析
Dog d=new Dog();创建对象时,内存中发生什么?
1.首先在栈内存中开辟一块空间,Dog类型引用类型变量d,把d压入栈底,此时d只有默认 值 d=null;
2.在堆内存中开辟一块空间用于存放Dog类型的对象
3.要给这个对象进行初始化,例如:String s=null;
4.初始化完成后会生成一个唯一的地址值,并把这个我唯一的地址值交给栈内存中的变量d保存
5.后续想对对象进行操作,比如 d.age=3;会先到栈内存中找到d变量保存的地址值,然后根据地址值找到堆内存中的对象进行操作
面向对象三大特征之——封装
1.为啥要封装
1.提高程序的安全性
2.封装可以使资源按照我们预先规定的方式来操作
2.属性的封装
用private修饰属性,被private修饰的属性只能在本类使用,外界无法访问,提高了数据的安全性,外界想要访问必须按照我们提供的方式来调用,需要根据属性来生成公共的set() 和get()
3.方法的封装
可以使用public,private等来修饰
总结:属性私有化,提高数据安全性,行为公开化,提高代码复用性
构造函数
格式:与类同名,且没有返回值类型
作用:创建对象
执行时机:每次创建对象时都会执行
构造函数分三种:无参构造,含参构造,全参构造
无参构造:默认存在,若添加其它构造,无参构造会被覆盖
含参构造:对参数无要求,有参数就行
全参构造:参数必须与本类的属性一致,全参构造不仅能创建对象,并且还能给赌侠ing的所有属性赋值
构造代码块
位置:类里方法外
执行时机:每次创建对象时执行,且优先于构造函数执行
作用:提取所有构造方法的共性功能
局部代码块
位置:方法里
执行时机:调用局部代码块所在的方法时执行
作用:控制变量的作用范围
总结:构造代码块>构造方法>局部代码块
this的用法
1.当成员变量与局部变量同名时,使用this指代成员变量
2.使用this在构造函数的第一行调用构造函数的功能
3.this()调用的是本类的无参构造 this(参数)调用的是本类对应参数的构造方法
super的用法
1.当父类的成员变量与子类的变量重名时,使用super指代父类成员变量
2.使用super在构造函数的第一行调用构造函数的功能
3.super()调用的是本类的无参构造 super(参数)调用的是本类对应参数的构造方法
面向对象三大特征之继承
1.继承关键字:extends
2.继承相当于把父类的功能复制了一份
3.Java只支持单继承,一个子类只能有一个父类,一个父类可以有多个子类
4.继承具有传递性 AextendsB BexrendsC,此时A具有C的功能
5.子类只能使用父类的非私有资源,被private修饰的资源不可用
6.子类可以在继承了父类的功能外扩展自己的额外功能,青出于蓝而胜于蓝
7.继承是强耦合关系,依赖性非常强
继承时的构造方法
1.子类创建对象时会先调用父类的构造方法、
2.因为子类构造函数第一行默认存在super();表示调用父类的无参构造
3.当父类没有无参构造时,可以通过super(参数)调用父类的含参构造
注意:子类必须调用父类的一个构造函数,无论无参还是含参
4.构造函数不能被继承!,因为与法院因构造函数的名字必须是本类类名,不能在子类出现父类名字的构造函数
方法的重写
1.发生在父子类之间,是在不改变父类方法的前提下,实现功能的修改,重写后子类对象调用的就是重写后的功能
2.重写原则:两同两小一大
两同:方法名和参数列表相同
两小:子类方法的返回值类型要么和父类相同,要么是父类返回值的子类,
子类抛异常小 于 父类
一大:子类方法的修饰符权限>=父类的修饰符权限
静态:关键字static
1.static可以修饰方法和成员变量
2.被static修饰的资源称为静态资源
3.静态资源随着类的加载而加载,最先加载,优先于对象加载
4.静态资源可通过类名直接调用
5.静态资源被全局共享,只有一份
6.静态资源只能调用静态资源
7.静态区域类不允许使用super与this关键字,因为静态加载时本类与父类对象还未加载
静态代码块
格式:static{ }
位置:类里方法外
执行时机:随着类的加载而加载,优先于对象加载【只加载一次】
作用:用于那些需要第一时间加载,且只加载一次的资源,常用来初始化
执行顺序:静态代码块.> 构造代码块>构造方法>普通方法(若方法里有局部代码块则继续执行局部代码块)
注意:若有多个静态资源,执行顺序取决于先后位置
静态不可与this,super共用
final关键字
修饰类:最终类,不可被继承
修饰方法:方法为最终实现,不可被重写
修饰常量;值不可更改,且常量定义时必须赋值(常量定义时需要全大写,单词间下换线隔开)
面向对象三大特征之多态
1.多态前提:必须有继承加重写
2.父类引用指向子类对象:父类类型的引用类型变量保存的是子类类型的对象地址值
3.编译看左边,运行看右边:编译时要看父类是否定义了这个资源,运行时使用的是子类的功能
资源使用情况:
1.成员变量使用的是父类的
2.成员方法使用的是父类的定义,子类的方法体
3.如果多态对象调用的是未被子类重写过的方法,则方法定义与方法体都是用父类的,
这个不符合多态的前提
4.静态资源属于类资源,随着类的加载而加载一次,通过类名直接调用,
被全局所有对象共享,所以静态不存在重写,在哪个类定义就属于哪个类