当前位置:网站首页>第六章 继承
第六章 继承
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虚拟机动态决定的。
- 静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际上在编译阶段就已经做了绑定。
- 成员变量(包括静态变量和实例变量)与引用变量所声明的类型的成员变量
边栏推荐
- Unity is better to use the hot scheme Wolong
- 在 NgModule 里通过依赖注入的方式注册服务实例
- Use huggingface to quickly load pre training models and datasets in moment pool cloud
- 用秩讨论线性方程组的解/三个平面的位置关系
- easyui修改以及datagrid dialog form控件使用
- [redis] redis installation
- Roson的Qt之旅#99 QML表格控件-TableView
- easyui入门
- Wechat applet does not use plug-ins, rendering videos in rich text, image adaptation, plus version
- Register service instances in ngmodule through dependency injection
猜你喜欢
随机推荐
China's chip self-sufficiency rate has increased significantly, resulting in high foreign chip inventories and heavy losses. American chips can be said to have thrown themselves in the foot
IAAs infrastructure cloud cloud network
简述redis集群的实现原理
Paper notes: highly accurate protein structure prediction with alphafold (alphafold 2 & appendix)
基于redis6.2.4的redis cluster部署
文字翻译软件-文字批量翻译转换器免费
3D 语义分割——Scribble-Supervised LiDAR Semantic Segmentation
Rosen's QT journey 100 QML four standard dialog boxes (color, font, file, promotion)
[mathematical modeling and drawing series tutorial] II. Drawing and optimization of line chart
Roson的Qt之旅#99 QML表格控件-TableView
搜狗批量推送软件-搜狗批量推送工具【2022最新】
After 20 years of agitation, the chip production capacity has started from zero to surpass that of the United States, which is another great achievement made in China
[book club issue 13] +ffmpeg video capture function
免费的低代码开发平台有哪些?
月薪1万在中国是什么水平?答案揭露残酷的收入真相
百度富文本编辑器UEditor单张图片上传跨域
QT listview list display component notes
Birui data joins Alibaba cloud polardb open source database community
为什么 4EVERLAND 是 Web 3.0 的最佳云计算平台
MyBaits









