面向对象编程三大特征

2023-11-15

面向对象三大特征:封装、继承、多态的概述以及其优点。

static

        static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量
        可以直接通过类名调用
        静态变量 特点:被该类所有对象共享不属于对象,属于类
        静态变量随着类的加载而加载的,优先于对象出现的
        调用方式:类名调用    对象名调用
​
        -------------------------
        静态方法
        
        被static修饰的成员方法
        特点:多用于测试类个工具类中
        工具类:帮助我们做一些事情,但是不描述任何事物的类
        类名见名知意   私有化构造方法  方法都定义为静态
        javabean类  用来描述一类事物的类。 student teacher
        测试类  用来检查其他类是否书写正确,带有main方法,是程序的主入口
        javabean类中很少会用
        调用方式:类名调用

static的注意事项

1、静态方法只能访问静态变量和静态方法

2、非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量个非静态的成员方法

3、静态方法当中是没有this关键字

this:表示当前方法调用者的地址值

由虚拟机赋值

总结:静态方法中,只能访问静态

非静态方法可以访问所有

静态方法中没有this关键字

晚来的可以调用早来的,早来的不能调用晚来的(静态变量随着类的加载而加载的,优先于对象出现的)

重新认识main方法

public:被JVM调用,访问权限足够大

static: 被JVM调用,不用创建对象,直接类名访问

因为main方法是静态的,所以测试类中其他方法也需要是静态的

void :被JVM调用,不需要给JVM返回值

main :一个通用的名称,虽然不是关键字,但是被JVM识别

String[] args : 以前用于几首键盘录入数据的,现在没用

面向对象三大特征

封装

对象代表什么,就得封装对应的数据,并提供数据对应的行为

继承

Java中提供一个关键字extend是,用这个关键字,我们可以让一个类和另一个类建立起继承关系。

public class Student extends Person{}

Student称为子类(派生类),Person称为父类(基类或超类)

使用继承的好处

1、可以把多个子类中重复的代码抽取到父类当中,提高了代码的复用性

2、子类可以在父类的基础上,增加其他的功能,使子类更强大

继承需要学习的点

1、需要自己设计继承结构

2、如何用别人写好的继承结构

什么 时候使用继承:

当类与类之间,存在相同的(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

总结:

什么是继承、继承的好处?

1、继承是面向对象三大特征之一,可以让类跟类之间产生子父的关系。

可以把多个子类中重复的代码抽取到父类当中,子类可以直接使用,减少代码冗余,提高代码的复用性。

2、继承的格式?

public class 子类 extends 父类{}

3、继承后子类的特点?

子类可以得到父类的属性和行为,子类可以使用。

子类可以在父类的基础上新增其他功能,使子类更强大。

继承的特点

Java只支持单继承,不支持多继承,但支持多层继承

单继承:一个子类只能继承一个父类

不支持多继承:子类不能同时继承多个父类

多层继承:

子类A继承父类B,父类B可以继承父类C 每一个类都直接或间接的继承于Object

注意事项:子类只能访问父类中非私有的成员

子类到底能继承父类中的哪些内容?

构造方法 非私有--不能 private--不能

成员变量 非私有--能 private--能

成员方法 非私有 private

构造方法的名字和子类的类名不一样

虚方法表 非private 非static 非final

只有父类中的虚方法表才能被继承

继承中:成员变量的访问特点

就近原则 : 先在局部位置找,本类成员位置找,父类成员位置找,逐级往上

出现重名的成员变量

name 从局部变量开始向上找

this. 从本类成员位置开始向上找

super. 从父类成员位置开始向上找

继承中:成员方法的访问特点:

this调用:直接调用满足就近原则

super调用:直接访问父类

方法的重写:当父类的方法不能满足子类现在的需求时,需要进行方法的重写

书写格式:在继承体系中,子类出现了和父类中一模一样的方法声明,我们就成子类的这个方法是重写的方法

@Override重写注解

1.@Override是放在重写后的方法上,校验子类重写时语法是否正确。

2.加上注解后如果有红色波浪线,表示语法错误。

3.建议重写方法都加上@Override注解。

方法重写的本质:覆盖了虚方法表中的方法

方法重写注意事项很要求

1、重写方法名车、形参列表必须与父类中的一致。

2、子类重写父类方法时,访问权限子类必须大于等于父类

空着不写<protected<public

3、子类重写方法时,返回值类型子类必须小于等于父类

4、建议:重写的方法尽量和父类保持一致。

5、只有被添加到虚方法表中的方法才能被重写。

继承中:构造方法的访问特点

1、父类中的构造方法不会被子类继承,但是可以通过super调用

2、子类中所有的构造方法默认先访问父类中的无参构造,再执行自己

(为什么?)

子类在初始化的时候,有时候会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。

子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化

怎么调用父类构造方法的?

子类构造方法的第一语句默认都是:super().不写也存在,且必须在第一行

如果想调用父类中的有参构造,必须手动写super进行调用

this、super使用总结

this:理解为一个变量,表好似当前方法调用者的地址值

super:代表父类存储空间

多态

什么是多态?

同类型的对象,表现出的不同形态

Student s = new student;                                       //学生的形态

Person p = new student;                                       //人的形态

多态的表现形式

父类对象 对象名称 = 子类对象

多态的前提:

有继承关系

有父类引用指向子类对象 Fu f = new Zi();

有方法重写

多态的好处:

使用父类作为参数,可以接收所有子类对象

体现多态的扩展与遍历

多态调用成员的特点

变量调用:编译看左边,运行也看左边

Javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败

Java运行代码的时候,实际上获取的就是左边父类中成员变量的值

方法调用:编译看左边,运行看右边

编译代码的时候会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败

运行代码的时候,实际上运行的是子类中的方法

理解:

Animal a = new Dog();

现在用a去调用变量和方法,而a是Animal类型的,所以默认都会从Animal这个类中去找。

成员变量:在子类的对象中,会把父亲的成员变量也继承下来。

成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖。

多态的优势和弊端

优势:

业务逻辑发生改变时,后续的代码无需修改。

定义方法的时候,使用父类类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利。

弊端:

不能调用子类的特有功能。

解决方案:

将调用者变回子类类型

Dog d = (Dog)a;

变量类型判断(a instanceof Dog)

新特性:

先判断后转换

if (a instanceof Dog d){

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向对象编程三大特征 的相关文章

随机推荐

  • Klarf 文件可视化工具

    1 技术框架 1 1 前端 Vue3 网页版 Electron Quasar 可生成 EXE APK 等客户端 Element Plus 控件 axios 跨域 1 2 后端 Flask 提供接口 2 Web 版和客户端版 2 1 Web
  • android:configchanges 作用,关于android:configChanges的属性的简介

    在Android系统默认的情况下 当 屏幕方向 或 键盘显示隐藏 变化时都会销毁当前Activity 创建新的Activity 如果不希望重新创建Activity实例 可以在AndroidManifest xml中配置 android co
  • 基于Docker做MySQL主从搭建与Django的读写分离

    目录 基于Docker做MySQL主从搭建 django读写分离 基于Docker做MySQL主从搭建 主从的作用 写数据数据时使用主库 从库只用来读数据 这样做能够减少数据库压力 主从搭建可以一主一从 也可以是一主多从 mysql主从配置
  • 微信小程序、微信公众号、H5之间相互跳转

    转自慕课网 一 小程序和公众号 答案是 可以相互关联 在微信公众号里可以添加小程序 图片有点小 我把文字打出来吧 可关联已有的小程序或快速创建小程序 已关联的小程序可被使用在自定义菜单和模版消息等场景中 公众号可关联同主体的10个小程序及不
  • 反事实因果(Counterfactual)简介

    Counterfactual 简介 确定的反事实 反事实是什么 用了例子说明 比如你去了二仙桥 走的是成华大道 但是用了很久才到 于是你就想要是当初坐地铁就好了 你会发现 要是坐地铁就好了 这个推断只有在发生了 走成华大道用了很久 这个事实
  • 矩阵、向量求导

    1 行向量对元素求导 2 列向量对元素求导 例2 略 参考例1 把行向量转成列向量 分别对y向量的每个项进行求导 3 矩阵对元素求导 4 元素对行向量求导 5 元素对列向量求导 例5 略 参考例4 6 元素对矩阵求导 7 行向量对列向量求导
  • 在设计web页面时,为移动端设计一套页面,PC端设计一套页面,并且能自动根据设备类型来选择是用移动端的页面还是PC端的页面。

    响应式设计 即移动端和PC端共用一个HTML模式 网站的程序和模板自动根据设备类型和屏幕大小进行自适应调整 这种方法我不喜欢 原因是不能很好保证各种客户端的效果 里面存在各种复杂的兼容性等问题 我喜欢为不同的客户端写不同的模式 避免在响应式
  • Python开发就业岗位有哪些?Python薪资待遇如何?

    Python开发就业岗位有哪些 Python就业岗位分为 Python后端 数据分析 数据挖掘 机器学习 爬虫等 后端岗位多 Python岗位占50 是爬虫工程师的10倍 其次是数据分析岗位 仅次于Python后端开发 数据挖掘和机器学习大
  • linux下安装jenkins

    参考文档 如何在Linux CentOS7 环境搭建 Jenkins 服务器环境 爱码网 1 官网下载安装 官网 Redhat Jenkins Packages sudo wget O etc yum repos d jenkins rep
  • Linux安全扫描工具ClamAV安装及使用

    导语 Clam AntiVirus ClamAV 是免费而且开放源代码的防毒软件 软件与病毒码的更新皆由社群免费发布 ClamAV在命令行下运行 它不将杀毒作为主要功能 默认只能查出系统内的病毒 但是无法清除 需要用户自行对病毒文件进行处理
  • Csharp:WebClient and WebRequest use http download file

    Csharp WebClient and WebRequest use http download file 20140318 塗聚文收錄 string filePath 20140302 pdf string fileName http
  • Unity - 射线检测

    Unity 射线检测 本文简要分析了Unity中各类 射线检测 的基本原理及用法 及不同检测手段的性能对比 内容包括 Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 BoxCast SphereCast Ca
  • 学习黑马JVM的笔记

    JVM详解 一 JVM介绍 1 什么是JVM 2 有什么好处 3 学习路线 二 内存结构 1 程序计数器 Program Counter Registe 1 定义 2 作用 3 特点 4 演示 2 虚拟机栈 Java Virtual Mac
  • 通过socket获取对方ip地址

    struct sockaddr in sa int len sizeof sa if getpeername sockfd struct sockaddr sa len printf 对方IP s inet ntoa sa sin addr
  • GDI/GDI+/D2D/D3D

    GDI GDI D2D D3D 标签 GDID3D 2015 07 27 11 28 503人阅读 评论 0 收藏 举报 分类 Windows系统 7 原文链接 2D Drawing APIs in Windows 在 Windows 7
  • 微服务之服务网关(GateWay)

    服务网关 概述 什么是网关 为什么需要网关 GateWay实现网关 spring cloud 2 0 概念 Route 路由 工作流程 搭建 动态路由 Predicate 断言 注意 Filter 过滤 自定义过滤器 todo gatewa
  • 亲测有效!电脑系统自己停止或休眠了怎么办?如何禁止系统休眠断网?

    亲测有效 电脑系统自己停止或休眠了怎么办 如何禁止系统休眠断网 新安装的操作系统 在开启一段时间无人操作的情况下 经常发现电脑休眠了 或者网络断开了 这种情况如何解决 上干货 电脑休眠 睡眠问题 1 打开控制面板 找到 电源选项 2 更改电
  • 前端神器avalonJS入门(一)

    http www 360doc com content 14 1031 20 21412 421521791 shtml avalonJS是司徒正美开发和维护的前端mvvm框架 可以轻松实现数据的隔离和双向绑定 相比angularJS等前端
  • vscode使用ftp-sync快速上传项目代码到服务器(宝塔ftp为例)

    使用vscode开发工具小伙伴们可以在vscode搜一下ftp sync这个插件 然后点击下载安装 2 使用快捷键 Ctrl Shift P命令 输入ftp sync Init 然后选中执行 3 执行上述命令快速生成 vscode ftp
  • 面向对象编程三大特征

    面向对象三大特征 封装 继承 多态的概述以及其优点 static static表示静态 是Java中的一个修饰符 可以修饰成员方法 成员变量 可以直接通过类名调用 静态变量 特点 被该类所有对象共享不属于对象 属于类 静态变量随着类的加载而