Java基础—面向对象OOP—18三大特性:封装、继承与多态

由于本身理解还不是很到位,所以写的很绕,后续待补充优化

   1、封装(底层):该露的露,该藏的藏

  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
  • 低耦合:仅暴露少量的方法给外部使用
  • 属性私有private,get/set
  • IDEA快捷键:alt+insert 快速插入getter、setter,同构造器
  • 一个不明白的点(不清楚是否重要,也不清楚答案是什么,后续待补充:private、public和static的区别--看下面的图
  • 私有的东西无法被继承

2、继承(宏观):扩展extends,是类和类之间的一种关系,还有依赖、组合、聚合

  • 在Java中所有类,都默认直接或间接继承Object类后续待补充
  • IDEA快捷键:光标在类中,点击ctrl+H ,查看继承关系
  • Java只有单继承,没有多继承:一个儿子只能有一个爸爸,一个爸爸可以有多个儿子
  • 私有的东西无法被继承

  •  super与this关键字 看着懵的话,之后应用了回头再看再补充,无需一直纠结(后续待补充)
  • IDEA的使用tip:可以新建file写笔记的

3、方法重写

为什么需要重写?因为父类的功能,子类不一定需要,或者不一定满足

IDEA快捷键:alt + insert 

关于重写:前提是需要有继承关系,子类重写父类的方法

1、方法名、参数列表必须相同

2、修饰符,范围可以扩大但不能缩小:public>protected>default>private

3、抛出的异常:范围可以缩小但不能扩大:如ClassNotFoundException(小) -->Exception(大)

重写是方法的重写,与属性无瓜

重写只与 非静态方法有关,与静态方法无瓜(比较下面两张图)

结论:(可以看蓝色o小圆点)

如果是静态方法:方法的调用仅与方法的左边有关,也就是定义的类型

如果是非静态方法:重写

换种好理解的说法:

有static时,fangfang调用Person类的方法,因为fangfang是用Person类定义的

没有static时,fangfang调用的是对象的方法,fangfang是用Student类new出来的(父类的引用指向了子类)

4、多态

  1. 自己理解:不管什么类型,左边决定有什么方法,右边决定用哪个构造器来初始化
  2. 多态的概念,可以理解为:方法的调用除了本类对象可以调用自己以外,在方法重写里还可以通过父类对象的引用来调用自己
  3. 注意事项:
  4. 是方法的多态,属性没有多态
  5. 父类和子类有联系 类型转换异常 ClassCastException
  6. 存在条件:继承关系,方法需要重写,父类引用指向子类对象
  7. 实现动态编译:类型:可扩展性
  8. 弹幕中说:编译看左边,运行看右边
  9. 对象能执行能执行哪些方法,主要看对象左边的类型,和右边关系不大
  10. 一个对象 实际类型是确定的,可以指向的引用类型就不确定了
  11. Student 能调用的方法都是自己的或者继承父类的
  12. Person类 父类型,可以指向子类,但是不能调用子类独有的方法

5、多态—instanceof 、引用类型的转换

instanceof:判断一个对象时什么类型是否存在父子关系

引用类型的转换:跟基础类型一样

高---低,需要强制类型转换

子类转换为父类,向上转型,可能丢失自己本来的一些方法,直接转换

抽象:封装、继承、多态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438764.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript DOM属性和方法之element元素对象

在HTML DOM中,elment对象表示HTML与纳素,可以包含的节点类型有元素u节点、文本节点、注释节点。它们有响应的属性和方法,有很多都是我们之前用过的。 一、element对象属性 1、attributes 该属性返回标签元素的所有属性集合,也就…

Hotspot源码解析-第27章-开始执行Java代码

第27章-开始执行Java代码 截止第26章完成了 创建Java虚拟的整个过程(Threads::create_vm()),在第5章时,有对后续流程的一个简单介绍,从这一章开始,要对后续流程做细节介绍,那就接着第5章继续讲…

dvwa,xss反射型lowmedium

xss&#xff0c;反射型&#xff0c;low&&medium low发现xss本地搭建实操 medium作为初学者的我第一次接触比较浅的绕过思路 low 发现xss 本关无过滤 <script>alert(/xss/)</script> //或 <script>confirm(/xss/)</script> //或 <script&…

springboot整合日志处理Logback

引言 ​ springboot框架 集成日志 logback 日志 ​ Logback是由log4j创始人设计的又一个开源日志组件。目前&#xff0c;logback分为三个模块&#xff1a;logback-core&#xff0c;logback-classic和logback-access。是对log4j日志展示进一步改进! 日志的级别 All < Trace…

C++(6) 继承

文章目录 继承1. 继承1.1 什么是继承1.2 C 继承方式1.2.1 基本案例1.2.2 继承权限组合1.2.3 继承中构造函数的说法1.2.4 继承中析构函数的执行顺序1.2.5 继承中变量名称冲突问题1.2.6 继承中函数【重写】 继承 1. 继承 1.1 什么是继承 面向对象程序设计中最重要的一个概念是继…

硬件知识(2) 手机的传感器-sensor

#灵感# 看看小米在干啥 手机型号&#xff1a;Redmi Note 13 Pro&#xff0c;解读一下它宣传的手机卖点。 目录 宣传1&#xff1a;1/1.4" 大底&#xff0c;f/1.65 大光圈&#xff0c; 宣传2&#xff1a;支持 2 亿像素超清直出&#xff0c;分辨率高达 16320 x 12240 宣…

基于STM32的以太网通信协议选择与实现

在基于STM32的以太网通信中&#xff0c;主要涉及到选择合适的通信协议和实现对应的功能代码。常见的通信协议包括TCP/IP、UDP、HTTP等&#xff0c;选择合适的协议取决于具体应用需求。以下将介绍在STM32上进行以太网通信时&#xff0c;常用的通信协议选择以及对应功能代码的实现…

C++仿函数、万能头文件、transform学习

这是网上的一个代码,里面的一些东西以前没用过; #include <bits/stdc++.h> using namespace std;// A Functor class increment { private:int num; public:increment(int n) : num(n) { }int operator () (int arr_num) const {return num + arr_num;} };// Driver …

如何配置MacLinuxWindows环境变量

这里写目录标题 什么是环境变量什么是PATH为什么要配置环境变量 如何配置环境变量环境变量有哪些环境变量加载顺序环境变量加载详解 配置参考方法一&#xff1a; export PATHLinux环境变量配置方法二&#xff1a;vim ~/.bashrcLinux环境变量配置方法三&#xff1a;vim ~/.bash_…

macOS与Linux相互投屏的方法

很多人面对跨系统投屏都望而却步。其实只要找对方法&#xff0c;两台不同系统的电脑也可以相互投屏。 今天就来看看Linux系统和macOS系统如何相互投屏&#xff01; 第一步&#xff0c;将Linux系统电脑和macOS系统电脑连接同一网络。假设是macOS系统投屏到Linux系统&#xff0c;…

Docker版Jellyfin手动安装插件

Docker版Jellyfin手动安装插件 目录隐射&#xff0c;然后把下载的插件解压到目录中查询运行中的容器&#xff0c;拿到容器id切换到容器目录下 复制解压好的插件(整个文件夹)到容器中存放的插件目录中重启容器后就能在插件中看到了 目录隐射&#xff0c;然后把下载的插件解压到目…

用可视化案例讲Rust编程3. 函数分解与参数传递

上一节我们在绘制面要素的时候&#xff0c;发现了函数功能体是三个不同步骤组成的&#xff1a; 读取文件获得geometry把geometry转变为绘图元素trace把绘图元素绘制到地图上 像我们上一节那样&#xff0c;把所有的功能都写在一个函数里面&#xff0c;这样的函数灵活性太差&am…