目录
封装
将事物的内部信息隐藏起来,外界无法访问和修改,只能通过指定方式进行访问和修改。适当的封装便于代码的维护和理解,加强代码的安全性。
把该隐藏的隐藏起来,把该暴露的暴露出来
遵循:高内聚 低耦合
高内聚:尽可能将数据和功能组织在同一个类中,各个类中的操作细节自己完成,确保其中的独立性。
低耦合:各个类之间的依赖关系尽可能低,就是说一个类的变化尽量减少对其他类的影响。提高代码的扩展性和可复用性,灵活性;
如何实现封装呢?权限修饰符
权限修饰符(访问控制修饰符):private ,缺省(不写) ,protected,public
根据public 来跨包使用来记住
本类 本包 其他包子类 其他包非子类
private 对 错 错 错
缺省 对 对 错 错
protected 对 对 对 错
public 对 对 对 对
private私有化
保护数据,防止外部直接访问和修改,以确保数据的完整性和安全性。
同时提供了公共的getter和setter方法来访问和修饰这些私有变量,可以更好控制对这些变量的访问和修改。
封装的目的
隐藏内部类实现的细节
让使用者只能通过事先预定的方法访问数据,从而在该方法中加入控制逻辑 ,限制对成员变量的不合理访问,还可以对数据进行检查监测,从而有利于保证对象信息的完整性。
private 数据类型 变量名;
提供getter 和setter方法来访问私有化的成员变量
方法:快捷键 ALT+insert 快速创建
继承
继承有延续(下一代延续上一代的基因、财富)、扩展(下一代和上一代又有所不同)的意思
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成某种关系。如图所示:
其中,多个类可以称为子类,也叫派生类;多个类抽取出来的这个类称为父类、超类(superclass)或者基类。
继承的好处
-
提高代码的复用性。
-
提高代码的扩展性。
-
表示类与类之间的is-a关系
继承的语法格式 关键字 extends
可以声明一个子类继承另外一个父类
继承的特点
1.子类会继承父类所有的实例变量和实例方法
-
当子类对象被创建时,在堆中给对象申请内存时,就要看子类和父类都声明了什么实例变量,这些实例变量都要分配内存。
-
当子类对象调用方法时,编译器会先在子类模板中看该类是否有这个方法,如果没找到,会看它的父类甚至父类的父类是否声明了这个方法,遵循从下往上找的顺序,找到了就停止,一直到根父类都没有找到,就会报编译错误。
继承意味着子类的对象除了看子类的类模板还要看父类的类模板。
2.Java只支持单继承,不支持多重继承
3.Java支持多层继承(继承体系)
4.一个父类可以同时拥有多个子类
查看继承树
Ctrl +H
图像化方式
Ctrl +Alt +U
方法重写(Override)
IDEA重写方法快捷键:Ctrl + O
重写方法的要求
1.必须保证父子类之间重写方法的名称相同。
2.必须保证父子类之间重写方法的参数列表也完全相同。
2.子类方法的返回值类型必须【小于等于】父类方法的返回值类型(小于其实就是是它的子类,例如:Student < Person)。
注意:如果返回值类型是基本数据类型和void,那么必须是相同
3.子类方法的权限必须【大于等于】父类方法的权限修饰符。
注意:public > protected > 缺省 > private
父类私有方法不能重写
跨包的父类缺省的方法也不能重写
方法的重载和方法的重写
方法的重载:方法名相同,形参列表不同。不看返回值类型。
多态
多态是继封装、继承之后,面向对象的第三大特性。
父类类型 变量名 = new 子类对象
父类类型:指子类继承的父类类型,或者实现的父接口类型。
多态引用的表现
:编译时类型与运行时类型不一致,编译时看“父类”,运行时看“子类”
弊端:编译时,只能调用父类声明的方法,不能调用子类扩展的方法;
好处:运行时,看“子类”,如果子类重写了方法,一定是执行子类重写的方法体;变量引用的子类对象不同,执行的方法就不同,实现动态绑定。代码编写更灵活、功能更强大,可维护性和扩展性更好了。
应用多态解决问题(3种)
1.声明变量是父类类型,变量赋值子类对象
方法的形参是父类类型,调用方法的实参是子类对象
实例变量声明父类类型,实际存储的是子类对象
2、数组元素是父类类型,元素对象是子类对象
3、方法返回值类型声明为父类类型,实际返回的是子类对象