面向对象知识汇总(5)

目录

  • Day 5
    • 问题二十二:抽象类
      • 1. 抽象类概念
      • 2. 抽象类语法
      • 3. 抽象类特性
      • 4. 抽象类和普通类的区别
    • 问题二十三:接口
      • 1. 接口的概念
      • 2. 接口的语法规则
      • 3. 接口的使用
      • 4. 接口的特性
      • 5. 实现多个接口
      • 6. 接口间的继承

Day 5

问题二十二:抽象类

1. 抽象类概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

例如,在问题二十中,提到了打印图形的例子,在该例子中,父类Shape中的draw方法并没有准确描述具体的绘图信息,比如绘制三角形、矩形等,都是由子类的draw方法来完成的

  • 像这种没有实际工作的方法, 我们可以把它设计成一个抽象方法(abstract method)
  • 包含抽象方法的类我们称为抽象类(abstract class)

简单来说,就是该类的方法中并没有具体去做任何事情,也就是说并没有包含足够的信息,此时该方法可以设计为抽象方法

  • 抽象类:被abstract修饰的类
  • 抽象方法:被abstract修饰的方法,没有方法体,也就是说不用给出具体的实现体

抽象类也是类,也可以增加普通方法和属性,甚至是构造方法

2. 抽象类语法

public abstract class Shape {//...... 普通属性和方法,或者构造方法abstract public void draw();
}

3. 抽象类特性

  • 抽象类不能直接实例化对象
  • 抽象类必须被继承:并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类
  • 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
  • 抽象类中可以有构造方法,供子类创建对象时使用,初始化父类的成员变量,
    • 抽象类当中可以包含构造方法,这个构造方法并不是在实例化这个抽象类的时候使用,因为他就不能被实例化
    • 这个构造方法,主要是在子类当中让子类调用,帮助父类进行初始化
  • 抽象方法不能被 private、final或static修饰:因为抽象方法要被子类重写
abstract class A{public abstract void testA();
}
abstract class B extends A {//继承A后的子类B,并没有重写父类中的抽象方法,所以子类B必须为抽象类public abstract void testB();
}
class C extends B {@Overridepublic void testB() {System.out.println("testB");}@Overridepublic void testA() {System.out.println("testA");}
}

4. 抽象类和普通类的区别

  • 抽象类可以和普通类一样有成员变量、成员方法
  • 抽象类多了抽象方法,但是不一定含有抽象方法,但是包含抽象方法的类必须拿abstract修饰,此时这个类就是抽象类
  • 抽象类不能实例化
  • 如果一个普通类继承了一个抽象类,那么此时这个普通类必须重写这个抽象方法,否则这个普通类将改为抽象类

如果这个类不能描述一个具体的对象,那么就可以设置为抽象类

问题二十三:接口

1. 接口的概念

在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型

也就是说,是一种公共的行为规范标准,实现了某个接口的类,要依照该接口的规则行事

2. 接口的语法规则

public interface 接口名称{// 抽象方法public abstract void method1(); // public abstract 是固定搭配,可以不写public void method2();abstract void method3();void method4();// 注意:在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁
}
  • 创建接口时, 接口的命名一般以大写字母 I 开头.
  • 接口的命名一般使用 “形容词” 词性的单词.
  • 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性
  • 接口中的方法都是public abstract的(抽象方法),建议省略

3. 接口的使用

接口不能直接使用,必须要有一个"实现类"来"实现"该接口,实现重写接口中的所有抽象方法

public class 类名称 implements 接口名称{// ...
}
//USB接口
public interface IUSB {void openDevice();void closeDevice();
}
//鼠标类
public class Mouse implements IUSB{@Overridepublic void openDevice() {System.out.println("打开鼠标");}@Overridepublic void closeDevice() {System.out.println("关闭鼠标");}public void click(){System.out.println("点击鼠标");}
}

4. 接口的特性

  • 定义接口的时候使用关键字interface 来定义

  • 接口类型是一种引用类型,但是不能直接new接口的对象,也就是说不能被实例化

  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

  • 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)

  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现,如果要有具体的实现,那么必须是由default修饰或者是由static修饰

  • 重写接口中方法时,不能使用默认的访问权限

  • 接口中不能有静态代码块和构造方法

  • 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class

  • 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类

  • jdk8中:接口中还可以包含default方法

5. 实现多个接口

在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口

注意:一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类

通常在Java中, 面向对象编程中最常见的用法: 一个类继承一个父类, 同时实现多种接口. 一个类可以继承一个抽象类/普通类,同时还可以实现这个接口,顺序不能反过来先写继承后写接口

继承表达的含义是 is - a 语义, 而接口表达的含义是具有 xxx 特性

6. 接口间的继承

在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承,即用接口可以达到多继承的目的

接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字

interface IRunning {void run();
} 
interface ISwimming {void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}class Frog implements IAmphibious {//...重写run和swim方法
}

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

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

相关文章

考研总计划篇

政治 九月份开始听徐涛老师的课,只需要听哲学,政治,经济学即可,然后用仓盾小程序刷题,刷题就吃饭的时候刷就是了。 工具书—苏一的提分手册,每天抽一个小时刷刷上面的知识点。 英语(现在到九…

12(13)(14)-2(1)-CSS 字体图标+实战:商城首页

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 CSS 字体图标1 字体图标的产生2 字体图标的优点3 字体图标的下载4 字体图标的…

WordPress LayerSlider插件SQL注入漏洞复现(CVE-2024-2879)

0x01 产品简介 WordPress插件LayerSlider是一款可视化网页内容编辑器、图形设计软件和数字视觉效果应用程序,全球活跃安装量超过 1,000,000 次。 0x02 漏洞概述 WordPress LayerSlider插件版本7.9.11 – 7.10.0中,由于对用户提供的参数转义不充分以及缺少wpdb::prepare(),…

【第二十三篇】Burpsuite+SQL注入实现登录绕过等(靶场实战案例)

目录 Where+SQL注入获取隐藏数据SQL注入实现登录绕过Union+SQL注入获取数据库类型和版本Where+SQL注入获取隐藏数据 存在一个业务场景如下 筛选商品时,后端查询语句如下: SELECT * FROM products WHERE category = Gifts AND released = 1只有商品名匹配且该商品已发布(r…

ubuntu系统开机无限循环输入密码后黑屏【以及问题2:ls后桌面有文件但是桌面看不到】的解决方法

问题1:刚进来黑屏,无限循环输入密码后黑屏亮屏,然后又输入密码黑屏亮屏…… 解决方法:卸载重装桌面系统ubuntu-desktop那个。然后用的是在命令行startx可以进入一个新的与图形化界面, 然后进来界面后, 又遇…

使用vue3搭建一个CRM(客户关系管理)系统

目录 1. 需求分析 2. 设计 3. 技术选型 4. 开发环境搭建 5. 前端开发 6. 后端开发 7. 数据库搭建 8. 测试 9. 部署 10. 维护和迭代 总结 搭建一个CRM(客户关系管理)系统是一个复杂的项目,涉及到需求分析、设计、开发、测试和部署等…

idea中MySQL数据库的配置

在IntelliJ IDEA中配置数据库可以通过以下步骤进行: 打开IntelliJ IDEA,在菜单栏中选择"View" -> "Tool Windows" -> "Database",打开Database工具窗口。 在Database工具窗口上方,点击"…

程序猿之路:从兴趣到职业的蜕变

水篇(程序猿之路) 如果硬要说自己为什么做程序员的话,我有故事,你有酒(留言)吗? 目录 记录工作实践与项目复盘 技术笔记巩固知识要点 职场感悟心得 曾经的我,对计算机世界充满好奇…

2024全国现代流通经济创新大会暨城郊大仓基地高质量建设论坛日程发布

2024年4月19日 中国平谷 建设城郊大仓基地 创新现代流通经济 一、大会开幕式&主论坛 时间:9:00-12:00 地点:博物馆一楼 报告厅 主持人:中国商业联合会商贸物流与供应链分会会长干为 08:30-09:00 大会入场&宣传片视频 09:00-0…

LeetCode 热题 100 | 多维动态规划(二)

目录 1 5. 最长回文子串 2 1143. 最长公共子序列 菜鸟做题,语言是 C 1 5. 最长回文子串 核心思想:把总问题拆解为若干子问题。 总问题:从第 i 个字母到第 j 个字母是回文串子问题:从第 i 1 个字母到第 j - 1 个字母是回文…

SSH和telnet的了解

90%的中大型企业都会选用SSH?8分钟让你明白它赢在哪里!附实验操作_哔哩哔哩_bilibili 远程登录的安全协议SSH(会进行加密) (公有密钥,私有密钥) 公有密钥大家都可以获得。 (为了…

【Python基础】集合

文章目录 [toc]什么是集合集合的特点元素不重复性示例 无序性示例 集合操作增加元素add()方法 删除元素clear()方法pop()方法remove()方法 交集intersection()方法&符号isdisjoint()方法 并集union()方法|符号 差集difference()方法-符号 对称差集symmetric_difference()方…

配置交换机端口安全

1、实验目的 通过本实验可以掌握: 交换机管理地址配置及接口配置。查看交换机的MAC地址表。配置静态端口安全、动态端口安全和粘滞端口安全的方法。 2、实验拓扑 配置交换机端口安全的实验拓扑如图所示。 配置交换机端口安全的实验拓扑 3、实验步骤 &#xff…

ZStack Cloud 5.0.0正式发布——Vhost主存储、隔离PVLAN网络、云平台报警优化、灰度升级增强四大亮点简析

近日,ZStack Cloud 5.0.0正式发布,推出了包含Vhost主存储、隔离PVLAN网络、云平台报警优化、灰度升级增强在内的一系列重要功能。云主机管理、物理机运维、密评合规、灾备服务等诸多使用场景和功能模块均有更新,为您带来更完善的平台服务、更…

设计模式——2_8 策略(Strategy)

文章目录 定义图纸一个例子:如何切换坦克的攻击方式GameElement(游戏元素)TankFactory(坦克工厂)Tank(坦克) 医疗车和飞行车策略模式Behavior(行为)TankTankFactory 碎碎念策略和状态为什么我们…

Python数据分析可视化之NumPy的使用

NumPy(Numerical Python)是用Python编写的科学计算库,用来存储大型矩阵和执行大型矩阵的科学计算,在数据处理特别是科学计算方法具有独特优势,它包含: 一个强大的N维数组对象ndarray。丰富的广播功能函数整…

MySQL高级(索引语法、创建索引、查看索引、删除索引)

创建索引 create [unique | fulltext] index index_name on table_name (index_col_name,...); 查看索引 show index from table_name; 删除索引 drop index index_name on table_name; 案例演示: 先来创建一张表 tb_user,并且查询测试数据。 cre…

男女恋爱话术聊天对话回复矩阵版h5微信抖音QQ快手小程序app开发

男女恋爱话术聊天对话回复矩阵版h5微信抖音QQ快手小程序app开发 支持SAAS、支持独立加密、支持独立开源、价格不同。 买就送28W话术数据库 聊天神器 支持16种Al语气、男女版切换、矩阵运营、送后端转化渠道 支持微信公众号微信小程序抖音快手小程序可打包APP 这是一款什么软…

java开发的4套智慧系统源码 智慧校园系统源码 智慧工地系统源码 智慧城管系统源码

4套java智慧系统源码 智慧校园系统源码 智慧工地系统源码 智慧城管系统源码 3D 智能导诊系统源码 Java智慧校园系统源码 智慧学校源码 微信小程序电子班牌 智慧校园系统简介: 智慧校园的建设逐渐被师生、家长认可接受,智慧校园通过对在校师生、教务等…

MySQL学习笔记(数据类型, DDL, DML, DQL, DCL)

Learning note 1、前言2、数据类型2.1、数值类型2.2、字符串类型2.3、日期类型 3、DDL总览数据库/表切换数据库查看表内容创建数据库/表删除数据库/表添加字段删除字段表的重命名修改字段名(以及对应的数据类型) 4、DML往字段里写入具体内容修改字段内容…