JAVA面向对象的思想和编程
面向过程思想&面向对象思想
面向过程思想
- 步骤清晰简单,第一步做什么,第二步做什么…
- 面向过程适合处理一些较为简单的问题
面向对象思想
- 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程思索。
- 面向对象适合处理复杂的问题,适合处理需要多人协作的问题!
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,具体到微观操作仍然需要面向过程的思路去处理。
什么是面向对象(OOP)
本质:以类的方式组织代码,以对象的组织封装数据。
核心思想:
-
抽象:
面向对象的三大特征:
- 封装 把数据包装起来
- 继承 子类,父类
- 多态 同一个事务可以表现出多种形态
类与对象的创建
类与对象的关系
- 类是一种抽象的数据类型,它是对某一类事物的整体描述/定义,但是并不能代表某一个具体的事物
- 对象是抽象概念的具体实例
- 从代码运行角度考虑数先有类后有对象,类是对象的模板
创建与初始化对象
使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间为,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的,并且构造器有以下两个特点
- 必须和类的名字相同
- 必须没有返回类型,也不能有void
构造器
有参/无参
快捷生成构造的方法alt+insert
封装(数据的隐藏)
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
我们程序设计要追求“高内聚,低耦合”,高内聚就是类的内部操作细节自己完成,不允许外部干涉;低耦合就是仅暴露少量的外部方法给外部使用。
封装的意义
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 增加系统的可维护性
快捷键 alt+insert 自动对属性生成set/get方法
继承
继承的本质是对某一批类的封装,从而实现对现实世界更好的建模。
JAVA类中只有多继承,没有单继承。
继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等。
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键词extends来表示。子类是父类的扩展,扩展:extands。
Super详解
- 子类继承父类的属性
- 子类继承父类的方法(私有的无法被继承)
子类调用父类构造器的几种情况
- 如果父类为无参构造,则子类默认可以调用父类的无参构造。
在输出子类构造器时会先输出父类构造器
- 如果子类要调用自己的构造器,则不能再调用父类的构造器,且代码位置要在第一行。
- 如果父类为有参构造,则super();要写出来,并且要加上父类里有参构造器的参数,比如super(“name”);
super注意点
- super调用父类的构造器,必须在构造器的第一行
- super必须只能出现在子类的方法或者构造器中
- super和this不能同时调用构造器
super和this区别
- 代表对象不同:this代表本身调用者这个对象,super代表父类对象的引用
- 前提不同:this没有继承也可以用,super只能在继承条件下才可以使用
- 调用的构造器不同:this()调用本类的构造器,super()调用父类的
方法重写
alt+inster
重写的前提:
- 要有继承关系,子类重写父类的方法,执行子类的方法
- 方法名必须相同
- 参数列表必须相同
- 重写时,修饰符可以被扩大,不能缩小。public>Protected>Default>private
- 重写会抛出异常,异常的范围可以被缩小不能扩大
- 子类和父类方法一致但方法体不同
为什么要方法重写:父类的功能子类不一定需要,或者不一定满足!
重写只和静态方法有关,和非静态方法无关
多态
多态:即同一方法可以根据不同发送对象的不同而采用多种不同的行为方式,让程序变得更灵活。
一个对象的实际类型是确定的,但可以指向的引用类型是不确定的
对象能执行哪些方法,主要看对象左边的类型,和右边的关系不大
Student s1= new Student();
Person s2 = new Student();
Object s3 = new Student();
多态是方法的多态,属性没有多态
多态存在的条件
- 有继承关系
- 子类重写父类方法(static,final,private方法不能重写)
- 父类引用指向子类对象
instanceof和类型转换
instanceof可以判断两个类之间是否存在父子关系,如果有则为true,否则为false
低转高向上转型不需要强制转换,父类为高位子类为低位,
高转低向下转型需要强制转换
类型转换可以方便方法的调用,减少重复的代码,简洁。
拓展:static关键字详解
静态属性的调用最好最接用类名调用
静态方法和非静态方法的调用
匿名代码块,静态代码块
静态导入包
本文地址:https://blog.csdn.net/wpc2018/article/details/107892840