面向对象高级特性

2023-11-19

  • static的含义
  • 继承的规则
  • 子类实例化的过程
  • 方法的覆盖
  • final关键字
  • 抽象类的特性
  • 接口的规范
静态修饰符static
  • static可以修饰的元素
    • 属性---共享
    • 方法---访问的方式
    • 块---执行的时机
    • 只能修饰类成员,不能修饰局部变量
静态属性

静态属性
静态属性描述了类的所有对象的共同特征;非静态属性描述的是每个对象独有的特性;
  • 静态属性与非静态属性的对比:
  • 静态属性在该类第一次被加载到虚拟机时,分配静态存储区,以后每次运行不再分配空间。
静态方法
  • 使用static修饰方法时,不需要实例化,可以直接访问---也称为类方法
  • 两种方式访问:
    • 直接访问:类名。方法名()
    • 实例化后访问:对象名。方法名()
  • 作用:
    • 简化方法的使用
    • 便于访问静态属性
  • 限制:
    • 静态方法可以直接访问类中其他静态成员
    • 如果静态方法中要访问类中的非静态成员,必须先实例化类
    • 静态方法中不能使用this
    • 静态方法不能被非静态方法覆盖
特殊的静态方法main
  • 必须public权限修饰符
    • 最大权限保证任何位置都可以访问该函数,不受任何限制;
  • 必须static静态修饰符
    • 无需实例化,可以直接调用main函数;
  • 必须返回空值void
    • main函数仅是程序的启动,没有必要返回任何值;
  • main函数名不可改变
    • 固定的函数名,注意大小写;
  • String[]args:命令行参数(必须是字符串数组类型)
    • 从程序外部传入的参数;
实例变量初始化的顺序
  1. 隐式赋予变量默认值;
  2. 显示赋予初始值
  3. 构造方法体赋予新值;
注意:静态属性只在第一次装载入虚拟机时被赋值,对象实例化时不需要给静态属性赋值;
程序块(一般不使用)
  • 静态程序块
  • 非静态程序块
  • 可以使用程序块来统一给属性显示的赋值;
  • 静态块只执行一次,非静态块执行多次;
类继承的规则
  • 子类继承父类的所有(可见)属性所有(可见)方法
  • 但是构造器不继承;
方法的覆盖
  • 所谓“覆盖(override)”是在声明子类的成员方法时,其名称、参数、返回值都与父类的成员方法的名称、参数、返回值一样,在面向对象的程序设计中称为方法的覆盖
方法覆盖的规则
  1. 在父子类之间继承时发生
  2. 多个方法的名称相同
  3. 返回值类型必须相同
  4. 每个方法参数数量和参数类型和顺序相同
  5. 权限修饰符要求:子类方法的要不小于父类方法的
  6. 子类方法只能抛出父类方法异常或其异常的子类
super和this关键字
  • super()
    • 作用:调用父类的构造器
    • 只能出现在子类的构造器中,且必须是第一行
    • super()中的参数,决定了调用父类哪个构造器
    • 如果子类构造器中没出现super(),那么默认给增加super(),即调用父类的空构造器。
  • this()
    • 作用:调用本类的构造器
    • 只能写在构造器的第一行
  • 在同一个构造器中super()和this()不能同时出现
  • super.
    • 指向父类的引用。
  • this.
    • 指向本类的引用。
关键字final
  • final可以修饰的元素:
    • 变量(属性和局部变量):不能被重新赋值
      • 在声明的同时赋值
      • 在构造器中赋值
    • 方法:不能被覆盖,即不能修改。
    • 类:不能被继承
抽象方法
  • 只能方法声明,没有方法实现的方法;
  • 抽象方法用abstract声明,以“;”结尾。
  • public abstract void getArea();
抽象类
  • 含有抽象方法的类必须声明为抽象类;
  • 用abstract声明class。
抽象类的规则
  • 注意:
    • 抽象类不能被实例化;
    • 其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract
    • 抽象方法不能为static;
  • 在下列情况下,类必须声明为抽象类:
    • 当类的一个或多个方法是抽象方法时;
    • 当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
    • 当类实现一个接口,并且不能为全部抽象方法都提供实现时;
抽象类的本质
  • 抽象类是抽象方法和非抽象方法的集合
  • 特殊情况
    • 全部是抽象方法
    • 全部为非抽象方法
  • 实际上是一套规范
  • 思考:那么抽象类中的构造器还有必要存在么?
  • 答:可以存在,用于给属性传参;
接口interface
  • 接口不是一个类,不能实例化;
  • 接口是常量和抽象方法的集合;
  • 接口对类来说是一套规范,是一套行为协议;
  • 定义格式如下:
类实现接口
  • 接口实质上就是一个变量和抽象方法的集合。为了使用一个接口,你要编写实现接口的类。
  • 如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类。
接口的特点
  • 接口使用interface关键字来定义,而不是class
  • 接口中定义的变量都是公共静态最终变量
  • 接口中没有自己的构造函数,而且接口中定义的方法全部都是抽象方法,即只提供方法的定义,而没有提供方法的具体实现的语句。
  • 接口采用多继承机制,而不像类一样采用单继承机制。
  • 接口默认:
    • 常量:public static final
    • 抽象方法:public abstract
接口与抽象类的区别
  • 接口不能含有任何非抽象方法,而抽象类可以。
  • 类可以实现许多接口,但只能有一个父类。
  • 接口不是类分级结构的一部分,没有联系的类可以实现相同的接口。
访问接口中常量
  • public static final int MAX_SPEED=100;
  • 有三种方式:
    • 接口名.MAX_SPEED
    • 类名.MAX_SPEED
    • 对象名.MAX_SPEED
引用数据类型的转换
  • 前提:具有继承关系
  • 原则:子类就是父类
  • 向上转型:子类转换为父类,自动转换;
  • 向上转换损失了子类新扩展的属性和方法
    • 仅剩下父类中声明过的属性和方法
  • 向下转型:强制转换
    • 曾经向上转换过的对象,才能再向下转换。
  • 上溯优点:可以把不同类型的子类上溯为同一个父类类型,方便我们统一的处理它们;
  • 上溯缺点:因为上溯了,就忽略了每个子类特有的属性,仅关注了共同的属性;
多态
  • 相同类型的变量,调用相同的方法,执行的具体代码却不同的现象,称为多态;本质上遵守引用类型的转换规则。
  • 分为两种表现形式
    • 赋值多态
    • 传参多态(隐式的赋值多态)
  • 多态的机制
    • Override
多态的实现与使用
  • 实现java的多态遵循的要求:
    • 代码中必须有超类和子类继承关系
    • 超类提供作为借口的方法,指定规范
    • 参与多态的子类必须完善或者覆盖这些指定的方法,以达到接口效应
    • 编写驱动类,或者应用代码,子类向上转型为超类引用,实现多态
  • 多态的使用
    • 调用多态方法是通过向上转型,或称超类引用实现的。即向上转型后,有超类产生对子类多态方法的动态调用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向对象高级特性 的相关文章

随机推荐

  • C语言基础系列(四)——数组

    本期主题 c语言中的数组 C语言基础 数组 1 数组名 1 1 数组名的含义 2 空数组的用法 1 数组名 指针常量 特殊情框 2 指针数组 数组指针 3 空数组 1 数组名 1 1 数组名的含义 可以先看下面的这些声明 int a int
  • Java 工作2年后需要达到怎么样的技术水平

    请具体一点说要会什么技术 以及这些技术要达到什么水平 有人回答说这只能是大企业或者互联网企业的工程师才能拿到 也许是的 小公司或者非互联网企业拿两万的不太可能是码农了 应该是已经转管理后才有可能 还有区域问题 这个不在我的考虑范围内 因为除
  • qq键盘快捷键大全

    qq键盘快捷键大全 Ctrl A 全选 Ctrl B 整理收藏夹 Ctrl C 复制 Ctrl D 删除 添加收藏 在Word中是修改选定字符格式 在IE及傲游 中是保存为收藏 Ctrl E 搜索助理 在Word中是段落居中 Ctrl F
  • 哈希函数

    哈希函数 定义 Hash 一般翻译做散列 杂凑 或音译为哈希 是把任意长度的输入 又叫做预映射pre image 通过散列算法变换成固定长度的输出 该输出就是散列值 这种转换是一种压缩映射 也就是 散列值的空间通常远小于输入的空间 不同的输
  • 国产数据库梳理

    背景介绍及架构介绍 架构上划分 分库分表类 Spanner 架构 OceanBase Shared Storage 总结 当前国产数据库百花齐放 几乎每隔半年就会冒出一家数据库 各大厂商在去年也都更新了自己的数据库产品线名称 太多的数据库让
  • Winrar命令行解压带密码的压缩文件

    1 先自行安装好winrar 这个不用多说 2 我们创建一个压缩文件 这是一个文件夹 里边就2个txt文件 3 我们使用winrar对其进行加密压缩 现在我们就有一个带密码的压缩文件了 3 找到winrar的安装目录 把rar exe拷贝到
  • matlab读入从文件中读取大量的数据

    将文件导入matlab中 除了对利用菜单的操作 我们也可以使用matlab代码 这个是一个函数 这个函数我们提供所读文件的基础的名字 然后返回一个矩阵 function z readOneD basename readOneD BASENA
  • 我认为最好用的网页解析模块Parsel

    前言 众所周知 网页解析4大模块 1 正则表达式 re 2 bs4 BeautifulSoup 3 xpath lxml 4 css选择器 pyquery 大家一定都很熟悉 很多都是从这几个模块入手 本文不对这4个模块评价它们的优略 因为每
  • 攻防世界fileinclude题解

    目录 解题思路 file get contents 函数 PHP伪协议 解题思路续 解题思路 先看题目 打开题目场景 我们看到用了file get contents 函数 这里我忘了这个函数是什么意思了 于是又去翻了翻文档 file get
  • IDEA卡顿怎么办?快来用用这个办法

    IDEA卡顿解决方法 亲测有效 1 找到IDEA安装位置 打开这两个配置 2 修改配置 3 保存配置 重启IDEA 先介绍一下我电脑的情况 华硕dx80 8g运行 电脑配置一般 在跟同等价位的拯救者同时打开IDEA时 打开速度都差好多 为了
  • 分布式缓存数据库面试题redis

    redis和memcached什么区别 为什么高并发下有时单线程的redis比多线程的memcached效率要高 区别 1 mc可缓存图片和视频 rd支持除k v更多的数据结构 2 rd可以使用虚拟内存 rd可持久化和aof灾难恢复 rd通
  • Day 2 – 布尔值,字符串插值

    如何创建布尔值 布尔值是一种数据类型 用于存储逻辑真假值 在Swift中 布尔值用true和false表示 布尔值通常用于控制程序的流程和逻辑 let goodDogs true let gameOver false let isMulti
  • Active Directory 与域

    1工作场景导入 工作场景 XYZ公司是一家大型制造企业 公司有许多内设部门 车间和分厂 在全国各地有许多分公司 该公司总部信息中心有各类服务器30余台 各车间 分厂和分公司都有自己的服务器 客户机近千台 目前 该公司的各类应用大多基于Win
  • linux 查看JVM默认参数 (centos7)

    情景 之前学习过 深入了解JVM虚拟机 习得了一些JVM方面的一些知识 但是并没有相应的实战 虽然没有相应的实战 但是 咱们也得知道如何查看JVM默认参数 以及如何修改相应的JVM参数 查看命令 1 显示出JVM初始化完毕后所有跟最初的默认
  • C语言:递归实现输出一个整数的逆序

    任务描述 题目描述 编写一个递归函数 将一个整数n逆序输出 比如 n 12345 输出54321 相关知识 略 编程要求 请仔细阅读右侧代码 结合相关知识 在Begin End区域内进行代码补充 输入 一个整数n 输出 该整数的逆序 测试说
  • 蓝桥杯.卡片(模拟)

    Question Result 3181 Solve 直接模拟暴力 初始化卡片数量为2021 去模拟拼数的过程 注意点的话 我是先去判断卡片还有没有 再去减一 所以输出结果也有一个减一 因为一旦说卡片没有了 就意味着当前这个数字拼不成了 C
  • chmod 777 权限恢复问题 /etc/sudoers.d

    etc sudoers d问题 2016年07月27日 15 09 45 阅读数 1130 下述问题是由于我更改了整个 etc文件夹的权限后产生的 问题描述 sudo etc sudoers 可被任何人写 sudo no valid sud
  • tpcc mysql下载_TPCC安装和压测数据库数据表创建生成

    下载TPCC mysql root cnbugs1 git clone https github com Percona Lab tpcc mysql git 配置TPCC mysql root cnbugs1 mv tpcc mysql
  • C语言常见问题

    问题1 sizeof与strlen区别 1 sizeof sizeof 是一种单目操作符 是用来计算你所使用的操作数所占的空间字节大小 可以以类型 指针 数组和函数等作为参数 返回值类型为unsigned int 2 strlen strl
  • 面向对象高级特性

    static的含义 继承的规则 子类实例化的过程 方法的覆盖 final关键字 抽象类的特性 接口的规范 静态修饰符static static可以修饰的元素 属性 共享 方法 访问的方式 块 执行的时机 只能修饰类成员 不能修饰局部变量 静