当前位置:网站首页>第六章 继承
第六章 继承
2022-07-25 16:51:00 【执手天涯@】
1、继承的基本语法
**【简介】:**在Java中使用extends关键字来表示一个类继承另外一个类。
【语法】:
public class Sub extends Base{
}
【案例演示】:
public class Base {
public int a;
private int b;
int c;
protected int sum(int a, int b) {
return a + b;
}
}
public class Sub extends Base {
public void sub() {
a = 2;
b = 2;
c = 2;
sum(1, 2);
}
}
【图解错误】:
【注意事项】:
- 当Sub和Base位于同一个包中的时候,Sub类继承Base类中public、protected、和默认访问级别的成员变量和方法。
- 当Sub和Base不位于同一个包中的时候,Sub类继承Base类中public、protected访问级别的成员变量和方法。
- 一个类只能有一个直接父类,不能同时直接继承多个父类,但是可以间接继承多个父类。
- 每一个类都默认继承Object类。
- 父类的构造器不能被子类继承(构造器必须与类名称相同)
2、方法重载(Overload)
【应用场景】: 类的功能有多种实现方式,选用那种方式,取决于调用者给定的参数。
【满足重载的条件】:
- 方法名相同
- 方法中参数类型、个数、顺序至少有一项不相同
- 方法的返回值类型可以不同。
- 方法的修饰符可以不相同
3、方法覆盖(Override)
【应用场景】: 当父类中的方法不满足子类使用要求的时候,需要对父类中的方法进行覆盖。
【方法覆盖满足的约束条件】:
- 子类方法的名称、参数签名、和返回值类型必须与父类相同。
【正确代码演示】:
public class Base {
public void method() {
}
}
public class Sub extends Base {
public void method() {
}
}
【错误分析】:
- 子类方法不能缩小父类方法的访问权限。(原因:与多态机制发生冲突。)
【错误代码演示】:
public class Base {
public void method() {
}
}
public class Sub extends Base {
private void method() {
//子类缩小了父类的方法的访问权限
}
}
【错误分析】:
- 子类方法不能抛出比父类更多的异常。(会导致程序异常终止)
- 方法覆盖只存在于子类和父类之间,同一个类中的方法只能被重载不能被重写。
- 父类的静态方法不能被子类覆盖为非静态方法。
【错误代码演示】:
public class Base {
public static void method() {
}
}
public class Sub extends Base {
public void method() {
//编译出错
}
}
【错误分析】:
- 子类可以定义同父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。
【正确代码演示】:
public class Base {
public static void method() {
}
}
public class Sub extends Base {
public static void method() {
}
}
- 父类的私有方法不能被子类覆盖
- 父类的抽象方法可以被子类通过两种方式进行覆盖(1、实现父类的抽象方法 2、重新声明父类的抽象方法)
【正确代码演示】:
public abstract class Base {
abstract void method1();
abstract void method2();
}
public abstract class Sub extends Base {
//实现并且扩大访问权限
public void method1() {
}
//重新声明父类的抽象方法,并没有实现
public abstract void method2();
}
- 父类的非抽象方法可以被覆盖为抽象方法。
public class Base {
public void method() {
}
}
public abstract class Sub extends Base {
public abstract void method();
}
4、方法覆盖与方法重载的区别
【相同点】:
- 都要求方法同名
- 都可以用于抽象方法和非抽象方法之间
【不同点】:
- 方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致
- 方法覆盖要求返回值类型必须一致,而方法重载对此没有限制
- 方法覆盖发生在子类和父类之间,方法重载用于在同一个类的所有方法
- 方法覆盖对于方法的访问权限和抛出的异常有一定的限制,而方法重载没有限制
- 父类的方法只能被子类覆盖一次,而重载可以重载多次
5、super关键字
- super关键字表示当前子类的父类
- super关键字可以用来访问父类的构造器,默认子类会访问父类的无参构造器。
- 访问父类非私有的字段和方法(此处的方法只能是非静态的)
6、多态
【定义】:
用父类类型或父类接口来接收子类对象。即一个对象在运行时的多种状态。
【使用注意事项】:
- 对于引用类型的变量,Java编译器会按照它声明的类型来进行处理。例如:如果用父类类型接收子类对象,又需要访问子类中特有的属性时,就必须将该对象强制转换为子类类型,否则编译报错。
- 对于引用类型的变量,运行时、Java虚拟机会按照它实际引用的对象来处理。
- 在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,Java虚拟机采用以下绑定规则:
- 实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时由Java虚拟机动态决定的。
- 静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际上在编译阶段就已经做了绑定。
- 成员变量(包括静态变量和实例变量)与引用变量所声明的类型的成员变量
边栏推荐
- Slf4j and log4j2 process logs
- 3D 语义分割——Scribble-Supervised LiDAR Semantic Segmentation
- 企业直播风起:目睹聚焦产品,微赞拥抱生态
- 3D semantic segmentation - scribed supervised lidar semantic segmentation
- 如何安装govendor并打开项目
- Step by step introduction of sqlsugar based development framework (13) -- package the upload component based on elementplus, which is convenient for the project
- 3D semantic segmentation - PVD
- 7. Dependency injection
- MySQL之联表查询、常用函数、聚合函数
- win10设备管理认不到GTX1080Ti 显示设备的解决办法
猜你喜欢

Differences between cookies, cookies and sessions

Rebudget汇报PPT

Fastadmin TP installation uses Baidu rich text editor ueeditor

2D 语义分割——DeepLabV3plus 复现

企业直播风起:目睹聚焦产品,微赞拥抱生态

异常处理机制专题1
![[target detection] yolov5 Runtong voc2007 dataset (repair version)](/img/b6/b74e93ca5e1986e0265c58f750dce3.png)
[target detection] yolov5 Runtong voc2007 dataset (repair version)

Step by step introduction of sqlsugar based development framework (13) -- package the upload component based on elementplus, which is convenient for the project

【redis】redis安装

In the eyes of 100 users, there are 100 QQS
随机推荐
152. Product maximum subarray
WPF 实现用户头像选择器
Rebudget汇报PPT
自定义mvc项目登录注册和树形菜单
测试框架-unittest-跳过测试
linux内核源码分析之页表缓存
企业直播风起:目睹聚焦产品,微赞拥抱生态
博云容器云、DevOps平台斩获可信云“技术最佳实践奖”
IaaS基础架构云 —— 云网络
easyui datagrid控件使用
搜狗批量推送软件-搜狗批量推送工具【2022最新】
[cloud co creation] explore how gaussdb helps ICBC create core financial data
一百个用户眼中,就有一百个QQ
城市燃气安全再拉警钟,如何防患于未“燃”?
[OBS] frame loss and frame priority before transmission
Use huggingface to quickly load pre training models and datasets in moment pool cloud
用秩讨论线性方程组的解/三个平面的位置关系
Wechat applet does not use plug-ins, rendering videos in rich text, image adaptation, plus version
Paper notes: highly accurate protein structure prediction with alphafold (alphafold 2 & appendix)
MyBaits