![]()
正在上传…重新上传取消
概念:
同一个类中,方法名相同,访问修饰符相同,其他都相同,方法的参数列表不同【形参的顺序,个数,类型不同】,重载在一个类中没有继承关系,重载的各个方法之间相互也没关系。
![]()
正在上传…重新上传取消
本质:方法自己调用自己,注意点是一定要有递归跳出条件,必然就会栈溢出
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
概述:
public + 类名 +参数列表+{
}
注意点:
1.JDK默认提供无参构造,自己写了无参构造会自动替换掉默认的无参构造
2.可以写多个构造器,无参有参的根据需求提供很
3.构造器本身是个方法,所以它不仅是创建实例的,也可以在构造器中做很多的事情,比如,有参构造中进行参数校验,就很充血模式
概述:
this指代类当前实例(对象)的引用(地址),是当前对象自己。
注意点:
方法被哪个对象(实例)调用,方法中的this 就代表哪个对象(实例),可以访问对象所对应类的方法和属性。
作用:
1.在全局变量和局部变量冲突时,区分全局变量和局部变量
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
2.可以指代构造方法(当做构造方法来用)
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
概述:
1.尽可能多的将对象的细节实现,对外隐藏,在类的内部实现。做好充血模式。这样也会提高代码复用性。
2.对外控制访问权限。
类中的属性、方法通过访问修饰符private 修饰,对外不可见。提供外部可访问的统一入口,比如最基本的set get方法等。另外get set 方法其实可以很好地使用起来,做校验。当然最好的校验可以放在构造方法中。校验会比set 中校验更早。
封装的步骤:
step1.使用private来修饰属性和重要方法。
step2.外部需要访问的数据,提供统一的方法(此时修饰符为public )
step3.需要时可以考虑通过静态、注册、缓存等方式全局做安全性性处理。
概述:
static 是类中开辟的一块特殊空间,可以用来修饰类本身、类的实例创建的构造方法之外的几所有点,比如属性、方法、代码块)。
因为只能被类直接调用,类的实例不能直接调用,所以static 修饰的内容又叫类xxx,类变量、类方法。。。
特点:
1 访问权限,它隶属于类, 也只有类自己能调用,一般情况下实例是不能直接访问的
2被修饰的部分全局唯一,全局等共享,因此可作为缓存、工具类等。
原理是jvm 保证:static修饰的内容在方法区,被堆区的对象同享
![]()
正在上传…重新上传取消
3 访问权限,
1》类的被static 修饰的内容内部可以相互调用,比如static修饰的方法间直接调用,static修饰的方法调用static修饰的属性
2》static 这块特殊空间上的内容不能调用类中非static 修饰部分的内容
3》类中非static 修饰的内容能直接调用static修饰的内容,因为这部分是共享的。
概述:
被{ } 包裹的代码称为代码块
被static 修饰的代码块,称为静态代码块。
特点:
1.类中的代码块在每次实例创建时执行一次,且在构造方法之前执行。
2.静态代码块,在程序加载时执行一次,当然是在构造方法之前,但是不会随着实例创建而继续执行。
概述:
在父类的基础上去构建新的类,子类继承了父类的非私有属性和方法。当然父类中被private修饰的属性方法是不能直接调用的;
父类的构造器是不能继承的,父类构造方法的继承要用到super。
特点:
避免了子类写重复代码
保留父类功能时扩展了新功能
需要时子类还可以在子类中重写父类方法
概述:
用来访问父类的属性、方法、构造方
使用场景:
子类重写了父类的方法、此时默认会调用子类的方法,而这个时候需要调用父类的方法了,就要用到super 。
子类想用到父类的构造器时,要用到super
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
继承关系中,子类将父类已有的方法重新实现,称为重写。
重写是有继承关系的。注意这里没有接口实现的事情,接口实现是多肽的范畴。
重写的方法和父类结构上保持完全一致,只是具体的代码实现上不同。结构指的是方法名、参数列表都要保持一致,访问修饰符一般和父类保持一致或者更宽松而不是更严格、返回值类型和父类保持一致或者是父类返回值类型的子类。
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
private 限本类中可访问
default 不写修饰符默认就是default ,当然写上更好,限本包中可以访问。
protected 限于本包内可访问,另外加上其他包中要想访问只能是本包中该类的子类。
public 随便谁都可以访问。
final 本质上就干一件事,不让修饰的对象变了。
修饰类,不让变,就是不让继承。
修饰对象,不让变,特指的是地址的指针不变,但对象的的某个属性值是可以变的,也就是可以重新set赋值。
修饰方法,不让变,就是不让重写。
修饰变量,不让变,因此只能用来修饰常量,修饰变量就给自己埋坑了,变量会不能再重新赋值。
概述
同一个行为具有多种实现方式,比如吃饭这个行为不同的动物实现起来不同;
落地到代码就是同一个接口有不同的实现类,各自的实现方式不同。或者父类的某个行为,在子类中被重写而具有了不同的处理结果**。
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
作用
1.程序具有扩展性、是程序通用性更强
套路写法:
函数的形式参数写 抽象类、接口、父类,实际参数按照业务需要提供具体的实现类、子类,以达到比如工厂模式的效果。
![]()
正在上传…重新上传取消
概述:
引用类型的转型分为子类向父类的转型[向上转型]、父类向子类的转型[向下转型],各有特点。
向上转型:
现有子类和父类,有子类说明有方法的重写、可能有新的属性或者方法。
转型的过程是自动的,如 People poeple = new Man(); 过程中会丢掉子类新增的部分,剩下父类独有的这部分属性和方法。当然子类重写了父类的方法,调用时肯定用的是子类重写的方法。
![]()
正在上传…重新上传取消
向下转型:
现有子类和父类,有子类说明有方法的重写、可能有新的属性或者方法。同时考虑有多个子类存在。
转型的过程是被动的,父类要调用子类的方法,直接调会报错,需要强制转换为子类后再去由子类调用。原因是,多态方法调用时,会先检查父类中是否有该方法,如果没有程序编译都会失败,更不提运行了。采用的方式就是,强转为子类,子类自己调自己。
思考:
一般的父类怎么会调子类呢?肯定是作了多态、设计模式的处理等情况才会出现这种情况。另外父类转子类,转哪个子类,是要明确地,转错了子类,怎么调用对应子类中独有的方法呢?肯定不行的。所以需要一个判断是否是某个想要的子类,或者实例的方式: instanceof 出场了。
当前类的属于自己, 子类属于父类,比如猫属于动物,但父类不属于子类,比如动物不属于猫。
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
1.接口必须是有抽象方法
2.JDK1.8后增加了默认方法和静态方法,可以有多个默认方法和静态方法。
3.默认方法需要用实现类调用,静态方法必须是接口名来调用。
4.一个类可以实现多个接口,java中类单继承多实现。接口因为不能实现,是可以多继承的。
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
浅拷贝:
拷贝的是执行对中对象的指针地址
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消
深拷贝:
拷贝的是对中对象的内容,当然指向堆中对象的地址自然也不相同。
![]()
正在上传…重新上传取消
![]()
正在上传…重新上传取消