继承的概念
- 将父类(基类)的属性和方法给予子类(派生类);
- 一种类与类的关系;
- 使用已存在的类的定义作为基础建立新的类;
- 新类的定义可以增加新的数据或者新的功能,也可以用父类的功能,但不能选择性地继承父类;
- 两个类满足”A is a b”的关系是就可以使用继承。
继承的实现
- 利用
extends
实现继承;
- 只能支持单一继承,只有一个父类。
Class Cat extends Animal{
}
Class Animal{
}
方法重写和方法重载
方法重写 |
方法重载 |
在满足继承关系的子类中 |
在同一个类中 |
方法名、参数个数、顺序、返回值与父类相同、或者与父类兼容 |
方法名相同 |
访问修饰符的限定范围大于等于父类方法 |
参数个数、顺序、类型不同 |
|
返回值类型、访问修饰符任意 |
super
关键字的使用
super
关键字主要是用来调用多参父类构造方法的。在默认情况下,实例化子类的过程中,虚拟机默认调用的是父类的无参构造方法,如果用户与要调用父类的多参构造需要使用super
关键字;
- 代表父类引用;
- 子类对象的构造过程中必须调用其父类的构造方法;
- 如果子类的构造方法中没有显示标注,则系统默认调用父类的无参构造方法;
- 如果子类构造方法没有显示标注,且父类没有无参构造方法,系统将提示错误;
- 使用
super
调用父类指定构造方法,必须要在子类的构造方法的第一行。
public void Cat(){
super("xxx",18);
System.out.println("这是子类的无参构造方法");
}
super.print();
super.name;
super();
- 注意
super
关键字只能在子类构造方法中使用,且必须位于构造方法的第一行。
子类实例化时的程序执行顺序问题
- 总结一下来说是,父类与静态代码块先行,子类、构造代码块以及构造方法紧随其后;
- 父类静态成员
->
子类静态成员->
父类对象构造->
子类对象构造。
this
关键字与super
关键字的对比
this
关键字用来调用当前类允许被访问的属性和方法;
super
关键字用来调用父类当中允许被访问的属性和方法;
this
和super
关键字都不能在静态方法中被使用;
this
和super
不能同时出现在同一个构造方法中,一个关键字只能出现在一个构造方法中。
访问修饰符
访问修饰符 |
本类 |
同包 |
子类 |
其他 |
private |
$\checkmark$ |
|
|
|
默认 |
$\checkmark$ |
$\checkmark$ |
|
|
protected |
$\checkmark$ |
$\checkmark$ |
$\checkmark$ |
|
public |
$\checkmark$ |
$\checkmark$ |
$\checkmark$ |
$\checkmark$ |
Object
关键字
Object
类是所有类的父类;
- Java中的每一个类都可以使用
Object
中定义的方法。
equals()
toString()
final
修饰符
- 修饰类表示不允许被继承;
- 修饰方法表示不允许被子类重写;
- 修饰变量表示不允许修改;
final
修饰的方法可以被继承;
- 引用类型的变量:初始化之后不能再指向另一个对象,但指向的对象的内容是可以变动的;
- 可以配合
static
使用。
注解
- 可以声明在包、类、属性、方法、局部变量、方法参数的前面,用来对这些元素进行说明、注释。
按照运行机制分类 |
按照来源分类 |
源码注解 |
来自JDK的注解 |
编译时注解 |
来自第三方的注解 |
运行时注解 |
我们自己定义的注解 |