老规矩,先上思维导图(部分),从所周知,OOP 即面向对象编程,java就是面向对象编程的语言;万事万物皆为对象
1、类与对象
概念: 类用来封装数据,及处理这些数据的方法;*学会把我们自己创建的类看作是一种数据类型*
区别:类是抽象,而对象是具体
类变量和实例变量异同:
类变量:static修饰的变量成员变量,可以通过类型访问
实例变量: 没有static修饰的成员变量,必须通过实例对象访问
static:在类加载完成,进行初始化时执行,且整个生命周期只被执行一次,一般的可用于资源初始化
2、类的继承:
概念:继承就是子类继承父类的特征和行为,由此可见,子类就有了使用父类的属性和方法的权限。
*为什么要继承?*
将重复代码抽取到公共类(父类)中,让其它的类(子类)来调用它,减少代码量。
格式: public class 子类名 extends 父类{}
注意事项:java不允许多继承,继承的作用代码复用,其次的多态。
*继承初始化顺序:*
父类属性==》父类构造方法 ==》子类属性 ==》子类构造方法
掌握继承的写法,对父类成员的访问和使用,在项目中使用比较多
3、构造方法
1、构造方法:与类同名,一般用来初始化。
在对象实例化时,自动调用的构造方法,可以是无参的,也可以是带参的,就看我们怎么用。
例:
Student st=new Student(); //实例化,自动调用了Student类中不带参的构造方法 Student st=new Student(100); //自动调用了Student类中带参的构造方法
一般格式:
public 构造方法名(){ • //初始化代码 • }
2、六大特点:
1、构造方法名必须与类文件名相同
2、构造方法不能有返回值,也不能带void
3、构造方法在对象实例化(new)时被自动调用(这说明它不能被其它类手动调用)
4、构造方法可以根据实际需求带参数(对类属性进行赋值)
5、同一个类中可以存在多个构造方法(重载),但不能有同参
6、同一个类中没有写构造方法时,系统会默认给个无参、无执行块的构造方法,但是一旦自定义了构造方法,系统自带的就会被覆盖。
4、方法的重载和重写
4.1重写
当子类对于父类的不满意,可以补充,则直接重写父类的方法
删除重写中的super.方法();就是全部推翻父类写法。
注意事项:子类的方法名、返回值、参数必须要与父类保持一致,而访问修饰符只能比父类的要高或者相等
4.2重载
对方法进行重载,同一个类中存在多个方法名相同,参数不同的方法。
重载:*同名不同参*
同名即方法名相同;
不同参即参数个数、类型、顺序不同,与返回值无关。
注意事项:构造方法也能重载而且经常使用得到
5、接口与抽象类
如图所示:
5.1抽象:
abstract 加在类或方法前面变成抽象类、抽象方法。
1、 抽象类
不能被实例化,只能作为其它类的基类(父类)。
2、 抽象方法
没有方法体;
必须在子类中被实现(重写),除非子类也是抽象类;
抽象方法必须位于抽象类中。(换句话说:抽象方法一定要在抽象类中,抽象类中不一定所有的方法都是抽象方法)
抽象方法的由来:只规定对象的行为,不负责实现。(比如猪吃的方法,狗也有吃的方法,基类中写个吃的方法,但是吃什么就不管了。)
5.2接口
语法:public *interface* 接口名
实现多个: public class 类名 *implements* 接口名1,接口名2...
什么是接口?
类只能单一继承,但可以实现多个接口
可以将接口理解为职责或契约,打个比方,也可以理解为:食品安全管理的一种规范,如果要生产食品就必须要符合此规范。
接口里全部都是抽象方法,其它类在实现接口时,都要对接口中的方法进行重写。
6、多态
如图所示:
6.1多态:同一种行为在不同的对象上表现出来的不同的形态。
6.2使用多态实现思路:
1.编写父类
2.编写子类,子类重写父类方法
3.运行时,使用父类的类型,子类的对象
6.3四大修饰符:
*private*:私有化,最小气的,只能在自己的类中访问;
*friendly*:默认,友好的,只能在自己的类中、同包的类中访问;
*protected*:受保护的,能在自己的类、同包的类以及跨包形成父子关系时,子类中也能访问;
*public*:公共的,最大方的,当前项目中所有的类都可以访问。
7、异常
异常:就是在程序中有可能发生的问题。
对于可能发生问题的代码,我们要进行监控,这就使用到异常。
1、系统异常(看下常见的异常)
一般格式:
try{//监视 • //有可能出现问题的代码 • }catch(//异常的类型 异常信息所封装成的对象){ • //处理异常的代码 • }finally{ • //最后会被执行的代码(有无异常都会被执行) • }
catch中一般我们这样写
e.printStackTrace()
用来查看异常类型以及异常发生的位置
e.getMessage()
只是简单显示异常的信息
System.exit(0)程序正常退出,System.exit(1)非正常退出
常见异常:
8、OOP设计原则:
里氏替换原则:子类应当可以替换父类并出现在父类能够出现的地方,是多态的基础上延伸的
迪米特原则(最少知识原则):
只与你的直接朋友交谈,不与"陌生人"说话
优点:其目的是降低类之间的耦合度,提高模块的相对独立性
缺点:过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性
单一职责原则(DIP):类不要承担太多的功能,职责要单一;如果承担太多功能,则每个功能的变化都会影响该类