一. this:
1. 可以用来修饰属性、方法、构造器
2. this 理解为当前对象或当前正在创建的对象. 比如: this.name, this.show()
3. 可以在构造器中通过"this(形参)"的方式显式的调用本类中其他重载的指定的构造器
要求:
1. 在构造器内部必须声明在首行
2. 若一个类中有n个构造器, 那么最多有n-1个构造器中使用了this()
二. super:
1. 可以用来修饰属性、方法、构造器
2. 当子类与父类中有同名的属性时, 可以通过"super.属性"显式的调用父类中声明的属性, 若想调用子类的同名的属性"this.属性"
3. 当子类重写父类的方法后, 在子类中若想再显式的调用父类的被重写的方法, 就需要使用"super.方法"
4. super修饰构造器: 通过在子类中使用"super(形参列表)"来显式的调用父类中指定的构造器
① 在构造器内部. "super(形参列表)"必须要声明在首行
② 在构造器内部. "this(形参列表)"或"super(形参列表)"只能出现一个
③ 当构造器中, 不显式的调用"this(形参列表)"或"super(形参列表)"其中任何一个, 默认调用的时父类空参的构造器
this 和 super 的区别
No. | 区别点 | this | super |
---|---|---|---|
1 | 访问属性 | 访问本类中的属性, 如果本类没有此属性,则从父类中继续查找 | 访问父类中的属性 |
2 | 调用方法 | 访问本类中的方法 | 直接访问本类中的方法 |
3 | 调用构造器 | 调用本类构造器, 必须要放在构造器的首行 | 调用父类构造器, 必须放在子类构造器的首行 |
4 | 特殊 | 表示当前对象 | 无此概念 |
建议: 设计一个类时, 尽量要提供一个空参的构造器
static(静态的)
可以用来修饰属性, 方法, 初始化块, 内部类
1 static修饰属性(类变量):
① 由类创建的所有的额对象, 都共用一个属性
② 当其中一个对象对此属性进行修改, 会导致其他对象对此属性的一个调用. 实例变量(非static修饰的属性, 各个对象各自拥有一套副本)
③ 类变量随着类的加载而加载, 而且独一份
④ 静态的变量可以直接通过"类.类变量"的形式来调用
⑤ 类变量的加载要早于对象, 所以当有了队形之后, 可以"对象.类变量"使用, 但是"类.实例变量"事不行的
⑥ 类变量存在于静态域中
2 static修饰方法(类方法)
① 随着类的加载而加载,在内存中也是独一份
② 可以直接同通过"类.类方法"的方式调用
③ 内部可以调用静态的属性或静态的方法, 而不能调用非静态的属性或方法. 反之, 非静态的方法事可以调用静态的属性或方法的
注: ① 静态的结构(static的属性, 方法, 代码块, 内部类)的生命周期要早于非静态的结构, 同时被回收也要晚于非静态结构. ② 静态方法内是不可以有this或super关键字的
final(最终的):
可以用来修饰类、属性、方法
1. 修饰类: 这个类就不能被继承 (如: String类、StringBuffer类、System类)
2. 修饰方法: 这个方法不能被重写 (如: Object类的getClass())
3. 修饰属性: 此属性就是一个常量, 一旦初始化后, 不能再被赋值; (习惯上, 常量用大写字符表示)
此常量在那里赋值: ① 磁场两不能使用默认初始化 ② 可以显式的赋值 ③ 可以显式的赋值、代码块、构造器
变量用 static final 修饰: 全局常量
与 finally finalize() 区分开(没啥关系,只是长得像仅此而已)
abstract(抽象的)
可以用来修饰类、修饰方法 不能用来修饰属性、构造器、private、final、static
1. 修饰类: 抽象类
① 不可被实例化
② 抽象类有构造器(凡是类都有构造器)
③ 抽象方法所在的类, 一定是抽象类
④ 抽象类中可以没有抽象方法
2. 修饰方法: 抽象方法
① 格式: 没有方法体. 包括{}
如: public abstract void change();
② 抽象方法只保留方法的功能. 而具体的执行, 交给继承抽象类的子类, 由子类重写此抽象方法
③ 若子类继承抽象类, 并重写类所有的抽象方法, 则此类是一个"实体类", 既可以实例化
④ 若子类继承抽象类, 没有重写所有的抽象方法, 意味着次类中仍有抽象方法, 则此类必须声明为抽象的
interface(接口)
接口是与类并行的一个概念 (接口与具体的实现类之间也存在多态性)
1. 接口可以看作是一个特殊的抽象类, 是常量与抽象方法的一个集合
2. 接口时没有构造器的
3. 接口定义的就是一种功能(此功能可以被类所实现(implements), 如: class Student extends Person implements university)
4. 实现接口的类, 必须要重写其中所有的抽象方法, 方可实例化. 若没有重写所有的抽象方法, 则此类仍为一个抽象类
5. 类可以实现多个接口(----java 中类的继承是单继承的)
6. 接口与接口直接也是继承关系(接口可以实现多继承)
注: 5、6描述的是java中的继承的特点