Python
Java
PHP
IOS
Android
Nodejs
JavaScript
Html5
Windows
Ubuntu
Linux
面向对象高级特性
2023-11-19
static的含义
继承的规则
子类实例化的过程
方法的覆盖
final关键字
抽象类的特性
接口的规范
静态修饰符static
static可以修饰的元素
属性---共享
方法---访问的方式
块---执行的时机
只能修饰类成员,不能修饰局部变量
静态属性
静态属性
静态属性描述了类的所有对象的共同特征;非静态属性描述的是每个对象独有的特性;
静态属性与非静态属性的对比:
静态属性在该类第一次被加载到虚拟机时,分配静态存储区,以后每次运行不再分配空间。
静态方法
使用static修饰方法时,不需要实例化,可以直接访问---也称为类方法
两种方式访问:
直接访问:类名。方法名()
实例化后访问:对象名。方法名()
作用:
简化方法的使用
便于访问静态属性
限制:
静态方法可以直接访问类中其他静态成员
如果静态方法中要访问类中的非静态成员,必须先实例化类
静态方法中不能使用this
静态方法不能被非静态方法覆盖
特殊的静态方法main
必须public权限修饰符
最大权限保证任何位置都可以访问该函数,不受任何限制;
必须static静态修饰符
无需实例化,可以直接调用main函数;
必须返回空值void
main函数仅是程序的启动,没有必要返回任何值;
main函数名不可改变
固定的函数名,注意大小写;
String[]args:命令行参数(必须是字符串数组类型)
从程序外部传入的参数;
实例变量初始化的顺序
隐式赋予变量默认值;
显示赋予初始值
构造方法体赋予新值;
注意:静态属性只在第一次装载入虚拟机时被赋值,对象实例化时不需要给静态属性赋值;
程序块(一般不使用)
静态程序块
非静态程序块
可以使用程序块来统一给属性显示的赋值;
静态块只执行一次,非静态块执行多次;
类继承的规则
子类继承父类的
所有(可见)属性
和
所有(可见)方法
;
但是构造器不继承;
方法的覆盖
所谓“覆盖(override)”是在声明子类的成员方法时,其名称、参数、返回值都与父类的成员方法的名称、参数、返回值一样,在面向对象的程序设计中称为
方法的覆盖
。
方法覆盖的规则
在父子类之间继承时发生
多个方法的名称相同
返回值类型必须相同
每个方法参数数量和参数类型和顺序相同
权限修饰符要求:
子类方法的要不小于父类方法的
。
子类方法只能抛出父类方法异常或其异常的子类
。
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(使用前将#替换为@)
Java
面向对象高级特性 的相关文章
如何在日期选择器中设置不在当前月份的单元格的样式
我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1
Java 中的 XPath 节点集
我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?
File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]
Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
Java程序中的数组奇怪的行为[重复]
这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
manifest.mf 文件的附加内容的约定?
Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText
当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
如何为 Gson 编写自定义 JSON 反序列化器?
我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
如何在jsp代码中导入java库?
我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
请求位置更新参数
这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告
我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
Clip 在 Java 中播放 WAV 文件时出现严重延迟
我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
将 Long 转换为 DateTime 从 C# 日期到 Java 日期
我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
org.jdesktop.application 包不存在
几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)
我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
Tomcat 6找不到mysql驱动
这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
如何配置eclipse以保持这种代码格式?
以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
如何修复“sessionFactory”或“hibernateTemplate”是必需的问题
我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
JAVA - 如何从扫描仪读取文件中检测到“\n”字符
第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
Jackson 将单个项目反序列化到列表中
我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
随机推荐
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可以修饰的元素 属性 共享 方法 访问的方式 块 执行的时机 只能修饰类成员 不能修饰局部变量 静
热门标签
通用管理系统
try与catch
读者写者模型
KEIL5调试
Unity 热更
Unity 优化
占用
诊断工具
分支限界
CTFhub
VSLAM基础
密度计算机公式
朱战立
自启exe
ER关系建模
wrk 参数
wrk
居理
《从零开始c》
各种错误及解决方法
TPO范文
libgmp
字体转换
html网站字体压缩