封装
- 通过操作接口来访问方法
- 不需要知道方法内部的具体细节,提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 增加系统可维护性(方便在get/set方法中添加一些操作,对违规操作的限制等)
- 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
- 低耦合:仅暴露少量的方法给外部使用
- 通过private限定,get/set方法访问
JavaBean
- 是一种Java语言写的可重用的组件
- 需要满足
- 类是public
- 有一个无参的公共构造器(默认)
- 有属性和对应的get、set方法
this关键字
- this代表当前对象(当前正在创建的对象)
- 在类的方法中,我们可以使用
this.属性
或this.方法()
的方式,调用当前对象属性或方法- 但是,通常情况下,我们都选择省略"this."
- 如果遇到方法的形参和类的属性同名时,需要显式的使用
this.变量
的形式,区分属性和形参
this调用构造器
- 在类的构造器中可以使用
this(形参列表)
的方式调用本类中的其他构造器- 不能通过
this(形参列表)
这种方式调用自己this(形参列表) 或super()
必须声明在当前构造器的首行- 构造器中最多只能声明一个this()用来调用其他构造器
9、继承
extends 父类
- 子类:派生类、子类、subclass
- 父类:超类、基类、superclass
- Java中只有单继承,没有多继承,接口可以多继承(C++有)
- 所有的类都继承自Object类
- 被final修饰的类不能继承
- 特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构。只是因为封装性的影响,使得子类不能直接调用父类结构而已
- 一个父类可以有多个子类,一个子类只能有一个父类
- 类可以多重继承Object->父->子.....
- 子类直接继承的父类:直接父类。子类间接继承的父类:间接父类
- 子类继承父类以后,就获取了直接父类以及所有间接父类中生命的属性和方法
ctrl+H
打开继承树
为什么要有类的继承
- 减少代码的冗余,提高代码的复用性
- 便于功能的扩展
- 为了之后多态色使用
子类对象实例化的全过程
- 从结果上看:
- 子类继承父类以后,就获取了父类中声明的属性或方法
- 创建子类的对象,在堆空间中,就会加载所有父类中声明的属性
- 从过程上看:
- 当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类构造器,直到调用了java.lang.Object类中空参的构造器为止
- 正因为加载过所有父类的结构,所以才看到内存中有父类中的结构,子类对象才可以考虑进行调用
- 明确:虽然创建子类对象时,调用了父类的构造器,但是自始自终就创建过一个对象,即为new的子类对象
10、super
- 在子类的方法或构造器中,通过super.属性或super.方法的方式,显式的调用父类中声明的属性或方法。通常情况下(不重名的情况下)省略
- super只能调用父类的构造方法,且必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法!
- 当构造器的首行没有显式的声明this(形参列表)或super(形参列表),则默认调用的是父类中空参的构造器:super()
super和this的区别
- 代表的对象不同
- this:等价于当前这个类本身,调用这个对象本身的方法和属性(先在类中找,找不到去父类找)
- super:等价于父类对象,代表父类对象的引用
- 前提
- this:没有继承也可以使用
- super:只能在继承条件下才可以使用
- 构造方法
- this():本类重载的其他构造,必须在首行
- super():父类的构造,必须在首行
- 在类的构造器中,this()和super()只能用其中一个
- 当构造器的首行没有显式的声明this(形参列表)或super(形参列表),则默认调用的是父类中空参的构造器:super()
- 在类的多个构造器中,至少一个类的构造器使用了super(形参列表)调用父类的构造器