- 一种类与类之间的关系
- 使用已存在的类的定义作为基础建立新类
- 新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性的继承父类
- 父类 : 基类
- 字类 : 派生类
继承的关系 - 满足"A is a B"的关系就可以形成继承关系
如:
猫,狗是动物==>猫,狗继承自动物
学生,老师是人==>学生,老师继承自人
小轿车,大卡车是汽车==>小轿车,大卡车继承自汽车
使用extends实现封装
//一个类只能继承自一个父类
// 编写父类
class Animal{
// 公共的属性和方法
}
// 编写字类,继承父类
class Dog extends Animal{
// 子类特有的属性和方法
}
class Cat extends Animal{
// 子类特有的属性和方法
}
方法重写
语法规则:
- 返回值类型
- 方法名
- 参数类型、顺序、个数都要与父类继承的方法相同
方法重写 vs 方法重载 - 方法重写:
a.在满足关系的子类中
b.方法名、参数个数、顺序、类型与父类、返回值相同
c.访问修饰符的限定范围大于等于父类方法 - 方法重载:
a.在同一个类中
b.方法名相同
c.参数个数,顺序,类型不同
d.返回值类型、访问修饰符任意
方法存在重写,属性不存在重写
访问修饰符
- 公有的:public
- 私有的:private
- 受保护的:protected
- 默认
访问修饰符 本类 同包 子类 其 他 private ✔️ 默认 ✔️ ✔️ protected ✔️ ✔️ ✔️ public ✔️ ✔️ ✔️ ✔️
super
子类访问父类成员
// 访问父类成员方法
super.print();
// 访问父类属性
super.name;
// 访问父类构造方法
super();
- 子类的构造的过程中必须调用起父类的构造方法
- 如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类的无参构造方法
- 如果子类的构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错
- 使用super调用父类指定构造方法,必须在子类的构造方法第一行
super vs this - this:当前类对象的引用
-访问当前类的成员方法
-访问当前类的成员属性
-访问当前类的构造方法
-不能再静态方法中使用 - super:父类对象的引用
-访问父类的成员方法
-访问父类的成员属性
-访问父类的构造方法
-不能再静态方法中使用 - 构造方法调用时,super和this不能同时出现
实例化顺序
- 继承后的初始化顺序
父类静态成员
子类静态成员
父类对象构造(属性(赋值)、构造代码块、构造方法)
子类对象构造(属性(赋值)、构造代码块、构造方法)
Object
- Object类是所有类的父类
- 一个类没有使用extends关键字明确标识继承关系,则默认继承Object类(包括数组)
- Java中的每个类都可以使用Object中定义的方法
**Object 类的常用方法
方法 | 说明 |
---|---|
toString() | 返回当前对象本身的有关信息,按字符串对象返回 |
equalIs() | 比较两个对象是否是同一个对象,实则返回true |
hashCode() | 返回该对象的哈希代码值 |
getClass() | 获取当前对象所属的类信息,返回Class对象 |
final
1、修饰类表示不允许被继承
2、修饰方法表示不允许被子类重写
-final修饰的方法可以被继承
-不能修饰构造方法
3、小就是变量表示不允许修改
-方法内部的局部变量:在使用之前被初始化赋值即可
-类中成员变量:只能在定义时或者构造代码块、构造方法中进行初始化设置
-基本数据类型的变量:初始赋值止后不能更改
-引用类型的变量:初始化之后不能再指向另一个对象,但指向的对象的内容是可变的
4、可配合static使用
5、使用final修饰可以提高性能,但会降低可扩展性
注解
JDK1.5版本引入的一个特性
可以声明在包、类、属性、方法、局部变量、方法参数等的前面,用来对这些元素进行说明、注释
注解的分类
按照运行机制分
- 源码注解
- 编译时注解
- 运行时注解
按照来源分 - 来自JDK的注解
- 来自第三方的注解
- 我们自己定义的注解
网友评论