面向程序设计
- 为什么需要:处理规模比较大的问题
比较
1. 面向过程编程:
操作数据,组织数据。
自顶向下,算法核心。
函数作为划分程序基本单位,直接面向问题。
2. OOP:
组织数据,操作数据。
自下而上设计。
通过类(基本单位)间接解决问题。
- 什么是面向程序设计
一. 类
为什么需要类:拥有共同属性的一个个对象的集合。
什么是
1、普通类
2、抽象类
为什么:为了对类更好的进行分类。
什么是:1、abstract修饰类 2、一个类中没有包含足够的信息来描绘一个具体的对象,作为类族最顶层的父类
抽象类是对象的抽象。
如何用:1、只给出方法头,可以有方法体,方法体中没有实现方法(抽象类不能被实例化,无法在堆中建立空间也就是说无法new出来)。
3、接口
为什么:Java不支持多继承,但是可以实现多个接口,完善体系。
什么是:
1、特殊的抽象方法。
2、接口只作为一个标识作用,行为规范,行为抽象。
如何用:
1、interface修饰类。
2、关于方法体,JDK8后接口中使用了static或者default关键字修饰的方法是可以包含方法体的。
4、内部类
为什么:
1、编程思想解释道:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。ps:内部类核心是为了弥补Java缺陷,实现多继承,实现某一个接口并且和外部类没有影响。
2、现实开发中,我为了避免只为了实现一个接口中的某个方法,而且只使用一次的情况,我会用到内部类。
如何用:
1、局部位置:局部内部类、匿名内部类。
2、成员位置、成员内部类、静态内部类。
二. 对象
为什么:
1、进行研究的任何事物。
2、类的一个个体。
什么是
1、行为:施加操作和方法。
2、状态:施加行为时对象有什么响应。
3、标识:对象有相同的行为但是会有不同的状态。
三. 方法
为什么需要:
1、操作数据
2、完成特定功能的片段
3、类中创建,其他被引用。
什么是
1、构造方法
1、实例化对象
2、有参,无参(类默认会有一个无参构造方法)
3、名字必须定义的类名相同并且无返回类型。
2、普通方法
3、抽象方法
1、对方法分类,让子类继承方法并且实现。
2、建立一个抽象类,在类中创建抽象方法,然后让子类继承,将方法更加丰富实现(方法重写)。
如何用
1、修饰符 返回值类型 方法名(参数类型 参数名){ 方法体 }
2、重写
1、对父类方法不满意(发生在父子类)。
2、权限低于父类,相同的方法参数,相同返回值类型,方法体不一样。
3、重载
1、对本类中的方法不满意(发生在本类中)。
2、方法名必须相同,方法的参数列表一定不一样,访问修饰符和返回值类型可以相同也可以不同。
四. 封装
为什么:安全性、复用性、隐藏实现细节。
什么是:黑盒(控制用户对类的修改和访问数据程度)、会对外提供公开的访问方式。
如何用:public、protected、default、private。
五. 继承
为什么:解决类中重复代码的问题。
什么是:
1、子类继承父类并且无条件获得父类全部可继承的属性和方法(继承全部并不代表可以访问父类全部属性和方法,要看父类所修饰的访问权限)。
2、物理内存全部继承所有父类属性,但是语法上限制使用。
如何用: extends
super()
为什么:子类无法继承父类的构造方法。
什么是:子类调用父类构造方法。
如何用:
1、只能放在首行,且只有一个。
2、默认调用父类的无参构造函数(注意有无参数对应)
六. 多态
为什么:提高代码的重用性。
什么是:栈中赋值,进而改变引用指向。
如何用:父类引用访问子类从父类继承的对象(List<> list ***=*** new ArrayList<>()); 如果反过来就会报错必须强转!