类的继承
Posted 乌龟王八蛋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的继承相关的知识,希望对你有一定的参考价值。
类的封装
类的三大特性,封装、继承、多态,其中,实现封装的关键字是 private
Java中,类的封装只有一个目的:隐藏内部实现细节,提供功能实现
- 对于内部,类的属性访问、修改不可直接进行,而是通过特定的方法 get、set
- 对于外部,只需要 在意该类可以提供的功能,而不必要关心其内部细节
喜欢吃鸡蛋,而不必在意下蛋的细节或下蛋的母鸡,这是封装的理解
访问权限修饰符
Java 中的四个关键字 private
、default
、protected
、public
,作为访问权限修饰符存在
作用于类、属性、方法,代表着不同的可访问级别,具体的细节如下
以上,是详细的访问级别,当不添加访问修饰符时,默认为 default
对于 Java 中的 package 包
,简单理解为文件夹即可,代表 Java 源文件存放的层次目录
类的继承
Java 中,实现继承的关键字是 extends
在继承中,存在几个注意点
- Java 只支持单继承,即一个子类只可以继承一个父类
- 子类可以继承父类的(非私有)属性、(非有参构造)方法
- 子类自动调用父类的默认无参构造
根父类 Object()
在 Java 的继承体系中,存在一个最高父类 Object
,由它派生出其它的 Java 类
Object 类中,定义了一系列的公用方法,常见的有
- toString():返回该对象的字符串表示
- equals():比较两个对象的相等
- hashCode():返回该对象的哈希值
- clone():对象的克隆
==、equals() 的区别
在 Java 中,两个数据元素是否相同,存在两个方法判断,==
、equals()
==
:对原始
类型进行值
判断,而引用
类型则通过堆存储地址
判断equals()
:不可以用于原始
类型判断,引用
类型则通过堆存储地址
判断
简单的理解,==
对于原始类型,就是比较内容上的是否相同
而对于引用类型,==
、equals()
则是比较两个变量的对象引用地址是否相同
值得注意的是,equals()
可以被重写,更改它的判断条件,多见于 String、Integer
Java 中不支持
运算符重载
,所以 == 的定义不会改变
方法的重写
方法重写的前提,是父类方法可以被子类继承
在 Java 的继承,子类可以在继承父类方法的基础上,重写该方法,存在以下限制
- 子类不可以重写父类的静态成员方法、默认构造方法,但允许存在同名静态方法
- 方法重写时,必须使用
@Override
注解进行声明,标注这是一个有效的方法重写 - 类的属性不存在重写!!!
父类静态方法可以继承、不可重写,但允许存在同名静态方法,细节参考之后的 多态
@Override
注解可以对方法的重写做出约束(了解即可)
- 子类重写方法的访问权限,大于、等于父类方法
- 子类重写方法的返回类型,是父类返回类型或其子类
- 子类重写方法抛出的异常,是父类抛出的异常类型或其子类
方法重写的约束,也可以满足里氏代换的要求
方法的重写与方法的重载只是看似一样,实质完全不同的两个概念
super 关键字
super
关键字可以访问父类的构造方法、实例属性、实例方法
简单的理解为,子类继承了父类,父类相当于实例化了一个对象
基于此,可知 super
关键字的两个用途
- 在子类的构造方法中,调用父类的构造方法
- 访问父类的(非静态、私有)属性、(非静态、私有)方法
super
关键字与 this
关键字 都必须置于构造方法首行,率先执行,故二者又不可同时存在
final 关键字
最早见到 final,是在常量中,表示 final 常量,定义变量的不可变性
值得注意的是,final 关键字的用法很多,但含义上是一致的
在继承中,final 又意为不可继承
若 final 修饰类,则该类不可被继承;若 final 修饰类实例方法,则该方法不可被重写
值得注意的是(多次提醒),static
是可继承、不可重写,但可存在静态同名属性、函数
继承中的执行顺序
在 Java 的继承中,父类、子类的各种属性、方法、代码块,存在不同的执行优先级
若属性、方法、代码块的优先级相同,则顺序执行,自上而下
- 父类静态字段、静态代码块
- 子类静态字段、静态代码块
- 父类成员变量、非静态代码块
- 父类构造方法
- 子类成员变量、非静态代码块
- 子类构造器
简单的理解,父类、子类的静态部分是第一优先级,其次是父类其他部分、最后是子类
值得注意的是,构造方法的执行优先级,低于实例属性、方法
这也是为了方便 通过构造方法,为对象的实例属性赋值
以上是关于类的继承的主要内容,如果未能解决你的问题,请参考以下文章