当前位置: 首页 > news >正文

Java面向对象 二

系列文章目录

Java面向对象 一-CSDN博客

Java面向对象 三-CSDN博客


目录

系列文章目录

前言

一、继承

1. 继承的概念

2. 父类和子类成员的访问

3.子类的构造方法

3. this 和 super 

4. 初始化

5. final 关键字

二、多态

1. 多态的实现条件

2. 向上转型

3. 方法重写

4. 动态绑定

5. 重写和重载的区别

6. 向下转型

7. 多态的思想


前言

java 是一门面向对象的编程语言,本文介绍 java 面向对象编程的基础内容。


一、继承

1. 继承的概念

面向对象的思想中有继承的概念,继承允许保持原有类的特性,并在这个基础上扩展,增加新功能;

通过继承产生的类叫做子类/派生类,被继承的类叫做父类/基类;

继承的目的是对子类的共性抽取,实现代码复用;

java 中使用 extends 关键字来实现继承;

2. 父类和子类成员的访问

成员变量的访问:

this 可以访问父类的成员变量,也可以访问子类的成员变量;super 只能访问父类的;

当子类和父类中有同名的成员变量,子类访问时优先访问自己的;如果一定要访问父类的,就需要用到关键字 super;

成员方法的访问

this 可以访问子类和父类的成员方法,super 只能访问父类的;

当子类和父类具有同名方法,如果参数列表不同可以构成重载,子类可根据参数列表访问对应方法;如果参数列表相同,则优先访问子类的方法;如果要访问父类的方法,也需要使用 super 关键字进行访问;

3.子类的构造方法

子类继承父类后,需要先构造父类,再构造子类本身;

具体的实现方式:在子类的构造方法中,使用 super 调用父类的构造方法;

调用父类的构造方法目的是初始化从父类继承过来的成员变量,再调用自己的构造方法初始化新增加的成员变量;

使用 super 调用父类的构造方法时,只能写在第一行;在子类的构造方法只能出现一次,并且不能和 this 同时出现。

3. this 和 super 

相同点:

this 和 super 都是关键字;

都只能在类的非静态方法中使用,访问非静态成员变量和方法;

在构造方法中调用时,都只能出现在第一行,并且 this 和 super 不能同时存在;

不同点:

this 可以访问父类和子类的成员变量和方法,super 只能在子类中访问从父类继承下来的成员变量和方法;

在构造方法中,this() 调用本类的构造方法,super() 调用父类的构造方法,两种调用不能同时在构造方法中出现;

如果存在继承关系,构造方法中一定会出现 super() 调用,用户不写编译器也会增加;this() 如果用户不写,则没有;

4. 初始化

如果父类和子类都存在静态代码块和实例代码块,初始化的时候代码的执行顺序为:

父类静态代码块,子类静态代码块,父类实例代码块,父类构造方法,子类实例代码块,子类构造方法;

原因:

静态代码块在类加载的时候就会执行,实例代码块在创建对象的时候才会执行,因此是静态代码块执行顺序优先于实例代码块;

创建对象的时候子类需要先帮父类进行构造,而实例代码块的执行顺序优先于构造方法,因此 new 对象的时候,一定会先执行父类的实例代码块,再执行构造方法,接下来才是子类的实例代码块和构造方法;

5. final 关键字

final 修饰的类不能被继承,被 final 修饰的类称为密封类,例如 String;

二、多态

1. 多态的实现条件

必须在继承体系下,实现了向上转型;

子类对父类的方法进行重写;

使用父类的引用调用重写的方法;

2. 向上转型

使用父类 new 一个子类的对象,例如:Animal animal = new Dog(),这时候 Dog 就发生了向上转型;

通过方法传参:子类引用传给方法中父类参数的位置,也会发生向上转型;

通过返回值返回:返回子类对象,子类对象也会发生向上转型;

3. 方法重写

子类存在和父类方法名,参数列表,返回值(可以是父子类关系)都相同的方法,那么子类就重写了父类的方法;

注意事项:

被 private,static,final 修饰的方法,不能发生重写;

子类的访问权限一定要大于等于父类的访问权限;

构造方法不能重写;

4. 动态绑定

静态绑定:编译时,确定了调用哪个方法;

动态绑定:运行时,发现子类重写了父类的方法,就调用子类重写的方法;

发生向上转型后,通过父类引用调用重写的方法,代码运行时会执行子类重写的方法,就叫动态绑定;

5. 重写和重载的区别

子类中存在和父类方法名,参数列表,返回值都相同的方法,就发生了方法的重写;

同一个类中,存在方法名相同,参数列表不同的方法,就发生了发方的重载;

重写:方法名,参数列表必须相同,返回值相同或者为父子类关系,访问权限不能降低;

重载:方法名相同,参数列表必须不同,返回值可以不同,权限可以改变;

6. 向下转型

向下转型:把父类对象转化为子类对象,不一定能转型成功;

因此在转换之前一定要用关键字 instanceof 判断对象发生向上转型前是否为子类对象;

7. 多态的思想

 通过父类引用不同的子类的对象,调用同一个重写的方法,表现得行为不一样,这种思想叫做多态;

多态适用于方法,不适用于属性和构造方法;

http://www.xdnf.cn/news/641215.html

相关文章:

  • GitHub Copilot 现已支持 AI Coding Agent
  • MySQL:12_视图
  • 08_模型训练篇-Torchvision(下):其他有趣的功能
  • 文件操作(C语言版)
  • 12.LCD、FSMC和ILI9341芯片
  • python中pandas之dataframe知识
  • 文本存入向量数据库流程
  • Python海龟绘图(turtle模块)常考知识点总结
  • 【数据结构】线性表之“双链表(带头循环双向链表)”
  • java 加密算法的简单使用
  • Linux系统中实时查看日志
  • Unity3D仿星露谷物语开发50之初始化农作物
  • day27:零基础学嵌入式之进程
  • Docker镜像存储路径迁移指南(解决磁盘空间不足问题)
  • Nginx安全防护
  • 基于Python Anaconda环境,使用CNN-LSTM模型预测碳交易价格的完整技术方案
  • 大模型与训练与微调
  • Java基础 Day20
  • 嵌入式自学第二十七天
  • ST表——算法的优化
  • TCP 和 UDP 的区别
  • 电梯调度算法详解与Python实现
  • 页表:从虚拟内存到物理内存的转换
  • C语言初阶--操作符
  • 消息队列kafka的基础概念和部署
  • C#、C++、Java、Python 选择哪个好
  • TCP 的三次握手
  • Python Day32 学习
  • 十二、【鸿蒙 NEXT】如何使用系统api实现视频压缩
  • 电子电路:电学都有哪些核心概念?