[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WimM30J-1673710152502)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230111220720499.png)]
概念:
同一个类中,方法名相同,访问修饰符相同,其他都相同,方法的参数列表不同【形参的顺序,个数,类型不同】,重载在一个类中没有继承关系,重载的各个方法之间相互也没关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IHgt9c0D-1673710152504)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230111222950353.png)]
本质:方法自己调用自己,注意点是一定要有递归跳出条件,必然就会栈溢出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CvBdu3cy-1673710152505)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230111225018629.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChKIPwdW-1673710152506)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230111225751068.png)]
概述:
public + 类名 +参数列表+{
}
注意点:
1.JDK默认提供无参构造,自己写了无参构造会自动替换掉默认的无参构造
2.可以写多个构造器,无参有参的根据需求提供很
3.构造器本身是个方法,所以它不仅是创建实例的,也可以在构造器中做很多的事情,比如,有参构造中进行参数校验,就很充血模式
概述:
this指代类当前实例(对象)的引用(地址),是当前对象自己。
注意点:
方法被哪个对象(实例)调用,方法中的this 就代表哪个对象(实例),可以访问对象所对应类的方法和属性。
作用:
1.在全局变量和局部变量冲突时,区分全局变量和局部变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDQCFdEo-1673710152507)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230113060446460.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qg49AtbE-1673710152508)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230113060908850.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gcCIU25a-1673710152513)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230113061836583.png)]
2.可以指代构造方法(当做构造方法来用)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lHfZvHrs-1673710152515)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230113063045171.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jO7fC2DO-1673710152516)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230113063135777.png)]
概述:
1.尽可能多的将对象的细节实现,对外隐藏,在类的内部实现。做好充血模式。这样也会提高代码复用性。
2.对外控制访问权限。
类中的属性、方法通过访问修饰符private 修饰,对外不可见。提供外部可访问的统一入口,比如最基本的set get方法等。另外get set 方法其实可以很好地使用起来,做校验。当然最好的校验可以放在构造方法中。校验会比set 中校验更早。
封装的步骤:
step1.使用private来修饰属性和重要方法。
step2.外部需要访问的数据,提供统一的方法(此时修饰符为public )
step3.需要时可以考虑通过静态、注册、缓存等方式全局做安全性性处理。
概述:
static 是类中开辟的一块特殊空间,可以用来修饰类本身、类的实例创建的构造方法之外的几所有点,比如属性、方法、代码块)。
因为只能被类直接调用,类的实例不能直接调用,所以static 修饰的内容又叫类xxx,类变量、类方法。。。
特点:
1 访问权限,它隶属于类, 也只有类自己能调用,一般情况下实例是不能直接访问的
2被修饰的部分全局唯一,全局等共享,因此可作为缓存、工具类等。
原理是jvm 保证:static修饰的内容在方法区,被堆区的对象同享
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MrTGpFGa-1673710152517)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114014125353.png)]
3 访问权限,
1》类的被static 修饰的内容内部可以相互调用,比如static修饰的方法间直接调用,static修饰的方法调用static修饰的属性
2》static 这块特殊空间上的内容不能调用类中非static 修饰部分的内容
3》类中非static 修饰的内容能直接调用static修饰的内容,因为这部分是共享的。
概述:
被{ } 包裹的代码称为代码块
被static 修饰的代码块,称为静态代码块。
特点:
1.类中的代码块在每次实例创建时执行一次,且在构造方法之前执行。
2.静态代码块,在程序加载时执行一次,当然是在构造方法之前,但是不会随着实例创建而继续执行。
概述:
在父类的基础上去构建新的类,子类继承了父类的非私有属性和方法。当然父类中被private修饰的属性方法是不能直接调用的;
父类的构造器是不能继承的,父类构造方法的继承要用到super。
特点:
避免了子类写重复代码
保留父类功能时扩展了新功能
需要时子类还可以在子类中重写父类方法
概述:
用来访问父类的属性、方法、构造方
使用场景:
子类重写了父类的方法、此时默认会调用子类的方法,而这个时候需要调用父类的方法了,就要用到super 。
子类想用到父类的构造器时,要用到super
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gT8DALGN-1673710152518)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114033021897.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SwrpPX1M-1673710152519)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114033056204.png)]
继承关系中,子类将父类已有的方法重新实现,称为重写。
重写是有继承关系的。注意这里没有接口实现的事情,接口实现是多肽的范畴。
重写的方法和父类结构上保持完全一致,只是具体的代码实现上不同。结构指的是方法名、参数列表都要保持一致,访问修饰符一般和父类保持一致或者更宽松而不是更严格、返回值类型和父类保持一致或者是父类返回值类型的子类。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ceW5FDCi-1673710152520)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114035352500.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YUuxjH2U-1673710152521)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114035617003.png)]
private 限本类中可访问
default 不写修饰符默认就是default ,当然写上更好,限本包中可以访问。
protected 限于本包内可访问,另外加上其他包中要想访问只能是本包中该类的子类。
public 随便谁都可以访问。
final 本质上就干一件事,不让修饰的对象变了。
修饰类,不让变,就是不让继承。
修饰对象,不让变,特指的是地址的指针不变,但对象的的某个属性值是可以变的,也就是可以重新set赋值。
修饰方法,不让变,就是不让重写。
修饰变量,不让变,因此只能用来修饰常量,修饰变量就给自己埋坑了,变量会不能再重新赋值。
概述
同一个行为具有多种实现方式,比如吃饭这个行为不同的动物实现起来不同;
落地到代码就是同一个接口有不同的实现类,各自的实现方式不同。或者**父类的某个行为,在子类中被重写而具有了不同的处理结果****。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjMqGkCN-1673710152522)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114171801280.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GUvpFFpQ-1673710152522)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114172709749.png)]
作用
1.程序具有扩展性、是程序通用性更强
套路写法:
函数的形式参数写 抽象类、接口、父类,实际参数按照业务需要提供具体的实现类、子类,以达到比如工厂模式的效果。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xFOFASDO-1673710152523)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114174853525.png)]
概述:
引用类型的转型分为子类向父类的转型[向上转型]、父类向子类的转型[向下转型],各有特点。
向上转型:
现有子类和父类,有子类说明有方法的重写、可能有新的属性或者方法。
转型的过程是自动的,如 People poeple = new Man(); 过程中会丢掉子类新增的部分,剩下父类独有的这部分属性和方法。当然子类重写了父类的方法,调用时肯定用的是子类重写的方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fZhEVb7q-1673710152524)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114180209711.png)]
向下转型:
现有子类和父类,有子类说明有方法的重写、可能有新的属性或者方法。同时考虑有多个子类存在。
转型的过程是被动的,父类要调用子类的方法,直接调会报错,需要强制转换为子类后再去由子类调用。原因是,多态方法调用时,会先检查父类中是否有该方法,如果没有程序编译都会失败,更不提运行了。采用的方式就是,强转为子类,子类自己调自己。
思考:
一般的父类怎么会调子类呢?肯定是作了多态、设计模式的处理等情况才会出现这种情况。另外父类转子类,转哪个子类,是要明确地,转错了子类,怎么调用对应子类中独有的方法呢?肯定不行的。所以需要一个判断是否是某个想要的子类,或者实例的方式: instanceof 出场了。
当前类的属于自己, 子类属于父类,比如猫属于动物,但父类不属于子类,比如动物不属于猫。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x2bJswwh-1673710152525)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114184334663.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDgDc5gq-1673710152526)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114210351513.png)]
1.接口必须是有抽象方法
2.JDK1.8后增加了默认方法和静态方法,可以有多个默认方法和静态方法。
3.默认方法需要用实现类调用,静态方法必须是接口名来调用。
4.一个类可以实现多个接口,java中类单继承多实现。接口因为不能实现,是可以多继承的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeLQVEx9-1673710152527)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114220301894.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7jEJBVV-1673710152527)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114221033935.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xclfLzm-1673710152528)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114221339135.png)]
浅拷贝:
拷贝的是执行对中对象的指针地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vZWaievI-1673710152529)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114223627586.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1fDkI7yY-1673710152530)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114223835465.png)]
深拷贝:
拷贝的是对中对象的内容,当然指向堆中对象的地址自然也不相同。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nk4724vV-1673710152530)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114224523075.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVNtXGp6-1673710152531)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114224534623.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUoAJiuz-1673710152532)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20230114232019798.png)]