抽象类、接口和异常处理

文章目录

  • 前言
  • 抽象类(Abstract Class)
  • 接口(Interface)
  • 抽象类与接口的区别
  • 实践使用抽象类和接口设计程序
  • Java中的异常处理机制
  • 总结

前言

  1. 深入学习Java中的抽象类(Abstract Class)和接口(Interface),并理解它们之间的区别和适用场景。
  2. 实践使用抽象类和接口设计程序,掌握基于接口编程的设计思想。
  3. 学习Java中的异常处理机制,理解try-catch-finally语句块的作用和用法。

抽象类(Abstract Class)

定义与特点:

  • 抽象类是一种不能被实例化的类,用于表示一种抽象的概念或行为。
  • 抽象类中可以包含抽象方法(没有方法体的方法,用abstract修饰)和普通方法(有具体实现的方法)。
  • 抽象类的子类必须实现父类中的所有抽象方法,除非子类也被声明为抽象类。
  • 抽象类可以有构造方法,但不能通过new关键字直接实例化。

适用场景:

  • 当需要定义一组相关的方法,并希望为这些方法提供默认实现时,使用抽象类。
  • 当需要约束子类必须实现某些方法时,可以使用抽象类中的抽象方法。
  • 抽象类适合用于实现模板方法模式,即定义算法的骨架,将某些步骤延迟到子类中实现。

接口(Interface)

定义与特点:

  • 接口是一种特殊的类,它是完全抽象的,只能包含抽象方法和常量(在Java 8及以后版本中,接口还可以包含默认方法和静态方法)。
  • 接口中的方法默认是public abstract的,变量默认是public static final的。
  • 一个类可以实现多个接口,通过implements关键字。
  • 接口不能实例化,只能被实现。
  • 接口直接可以有多个实现
  • 当类实现接口时,需要实现接口中的所有方法。

适用场景:

  • 当需要定义一组行为或能力,但不希望提供默认实现时,使用接口。
  • 接口适合用于定义规范,确保实现接口的类具有特定的行为。
  • 在Java中,接口是实现多继承的一种方式,允许一个类继承多个接口。

抽象类与接口的区别

区别抽象类接口
定义不能被实例化的类特殊的类,完全抽象
成员可以有抽象方法和普通方法,有构造方法只能有抽象方法(Java 8+可包含默认方法和静态方法)和常量
继承只能被单继承可以被多继承(实现多个接口)
实例化不能直接实例化,只能通过子类实例化不能被实例化,只能通过实现类实例化
使用场景需要提供默认实现或约束子类行为时定义规范、实现多态、解耦不同类时

实践使用抽象类和接口设计程序

实践思路:

  • 分析需求,确定哪些行为或状态是共通的,适合放在抽象类中。
  • 确定哪些行为是接口级别的,即不同类之间共有的、但不需要默认实现的行为。
  • 设计抽象类和接口,并通过继承或实现的方式,在子类中实现具体的功能。

示例:
设计一个动物类Animal作为抽象类,包含吃(eat)和睡(s1eep)两个普通方法,以及一个抽象方法sound。

// 抽象类 Animal
public abstract class Animal {  // 普通方法  吃(eat)public void eat() {System.out.println("正在进食");}// 普通方法  睡(sleep)public void sleep() {System.out.println("正在睡觉");}// 抽象方法  public abstract void sound();  
}  

设计一个Vocalizable接口,用于描述能够发声的动物,包含makeSound方法。

// 接口 Vocalizable  
public interface Vocalizable {  void makeSound();  
}  

创建具体的动物类,如Dog和Cat,继承Animal类并实现Vocalizable接口,重写sound和makeSound方法。

// Dog 类,继承 Animal 并实现 Vocalizable  public class Dog extends Animal implements Vocalizable {  @Override  public void sound() {  System.out.println("狗在叫");  }  @Override  public void makeSound() {  System.out.println("汪汪");  }  
}  
// Cat 类,继承 Animal 并实现 Vocalizable  
public class Cat extends Animal implements Vocalizable {  @Override  public void sound() {  System.out.println("猫在叫");  }  @Override  public void makeSound() {  System.out.println("喵喵");  }  
}  
// 测试类  
public class Main {  public static void main(String[] args) {  Animal dog = new Dog();  Animal cat = new Cat();  // 调用普通方法  dog.eat();  dog.sleep();  // 调用抽象方法  dog.sound();  // 调用接口方法  ((Vocalizable) dog).makeSound();  // 调用普通方法  cat.eat();  cat.sleep();  // 调用抽象方法  cat.sound();  // 调用接口方法  ((Vocalizable) cat).makeSound();  }  
}

Java中的异常处理机制

1.异常处理机制
定义:Java中的异常处理机制是一种用于处理程序运行时出现的错误或异常情况的方法。
主要组件:

  • try块:用于包含可能产生异常的代码。
  • catch块:用于捕获并处理try块中抛出的异常
  • finally块:无论是否发生异常,finally块中的代码都会被执行,常用于关闭资源或执行清理操作。

2.try-catch-finally语句块的作用和用法

  • try块:包含需要保护的代码,即可能产生异常的代码。
  • catch块:用于捕获并处理try块中抛出的异常。可以有多个catch块,分别捕获不同类型的异常。
  • finally块:无论是否发生异常,finally块都会执行。它通常用于释放资源,如关闭文件、数据库连接等

示例代码:

try{//尝试执行的代码,可能产生异常int result=10/0;//这将引发ArithmeticExceptionfcatch(ArithmeticExceptione)//捕获并处理ArithmeticExceptionSystem.out.println(”发生除数为零的异常:+ e.getMessage());
}catch(Exception e){//可以捕获其他类型的异常(如果需要)//注意:如果上面的catch块已经捕获了具体的异常类型,这个catch块通常不会被执行System.out.println(”发生未知异常:"+ e.getMessage());
}finally{//无论是否发生异常,fina11y块中的代码都会执行System.out.println("执行fina1ly块中的代码”);//在这里可以执行资源释放或清理工作
}

总结

通过今天的学习和实践,我深入理解了Java中的抽象类和接口的区别及适用场景,并通过实际编程加深了对这些概念的理解。同时,我也掌握了Java异常处理机制的基本原理和用法,包括try-catch-finaly语句块的作用和使用方法。这些知识和技能将有助于我在未来的ava编程中更加灵活地处理类之间的关系和程序中的异常情况。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AD原理图编译出现Net XX has no driving source

提示无驱动电压源,这是因为你的芯片管脚设置了电气属性造成的。 两种解决AD中出现Net has no driving source警告的方法。 方法一:取消电气属性检测,但不推荐; 打开原理图编译项,将NET no driving source 修改为no …

PostgreSQL的学习心得和知识总结(一百五十三)|[performance]将 OR 子句转换为 ANY 表达式

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

树控件QTreeWidget

树控件跟表格控件类似,也可以有多列,也可以只有1列,可以有多行,只不过每一行都是一个QTreeWidgetItem,每一行都是一个可以展开的树 常用属性和方法 显示和隐藏标题栏 树控件只有水平标题栏 //获取和设置标题栏的显…

PPT在线画SWOT分析图!这2个在线软件堪称办公必备!

swot分析ppt怎么做? swot分析是一个非常常用的战略分析框架,经常会在ppt中使用。想在ppt中绘制swot分析图,使用自带的形状工具可以制作出来,但绘制效率不够高,在需要大批量制作的场景下,会让人非常心累………

DepthB2R靶机打靶记录

一、靶机介绍 下载地址:https://download.vulnhub.com/depth/DepthB2R.ova 二、信息收集 根据靶机主页显示,确认靶机ip为192.168.242.132 端口扫描 nmap -p- -A 192.168.242.132 发现只开放了8080端口 用dirsearch扫个目录 apt-get update apt-get …

基于LORA的一主多从监测系统_0.96OLED

关联:0.96OLED hal硬件I2C LORA 在本项目中每个节点都使用oled来显示采集到的数据以及节点状态,OLED使用I2C接口与STM32连接,这个屏幕内部驱动IC为SSD1306,SSD1306作为从机地址为0x78 发送数据:起始…

【Linux】基本认知全套入门

目录 Linux简介 Linux发行版本 发行版选择建议 Centos-社区企业操作系统 Centos版本选择 Linux系统目录 Linux常用命令 SSH客户端 Linux文件操作命令 vim重要快捷键 应用下载与安装 netstat,ps与kill命令使用 Linux应用服务化 Linux用户与权限 Linu…

Telephony CarrierConfig配置

1、CarrierConfig配置介绍 CarrierConfig(运营商配置),是Android为了针对不同运营商配置不同功能的配置文件,类似Modem的MBN配置,可以实现插入不同运营商卡,不同的功能实现或菜单显示等。 2、CarrierConfig…

力扣之1355.活动参与者

题目: Sql 测试用例: Create table If Not Exists Friends (id int, name varchar(30), activity varchar(30)); Create table If Not Exists Activities (id int, name varchar(30)); Truncate table Friends; insert into Friends (id, name, acti…

【数据结构与算法-高阶】并查集

【数据结构与算法-高阶】并查集 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 🌼文章目录🌼 1. 并查集原理 2. 并查集实现 3. 并查集应用 1. 并查集原理 在一些应用问题中&…

charAt,chartCodeAt,codePointAt,fromCodePoint,fromCharCode

生僻字的length算2,有些空格是特殊空格,比如\u3000 u3000不是全角空格,u3000是表意字空格(Ideographic Space),宽度和一个表意字(汉字)相同。它应当被当做汉字来处理。比如,在一些排版中&#x…

OpenSource - License 开源项目 TrueLicense

文章目录 官网集成Demo 官网 https://truelicense.namespace.global/ https://github.com/christian-schlichtherle/truelicense 集成Demo https://github.com/christian-schlichtherle/truelicense-maven-archetype https://github.com/zifangsky/LicenseDemo https://git…

map和set(c++)

前言 在前面我们在介绍二叉搜索树时我们分别实现了一个key结构和key-val结构,如果我们再进一步完善这棵树,将二叉搜索树升级为红黑树去存储key和key-val那么我们就可以得到我们今天要介绍的主角map和set。当然了标准库的实现还是有很多需要注意的地方&a…

植物大战僵尸修改器-MFC

创建项目 创建mfc应用 基于对话框 打开资源视图下的 IDD_MFCAPPLICTION2_DIALOG 限制对话框大小 将属性中Border的值改为对话框外框 删除对话框中原有的控件 属性-外观-Caption 设置对话框标题 工具箱中拖放一个按钮 修改按钮名称 将按钮ID改为IDC_COURSE 在MFCApplication2…

k8s微服务

一 、什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service,应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…

QT安装成功后-在创建项目时,发现仅有项目名文件

(1)QT安装成功后,发现仅有项目名文件其他可编辑文件缺失 (2)点击文件名左上角的感叹号显示【No kits are enabled for this project. Enable】 小编在尝试多次后发现,可以通过以下方式解决:QT软…

接着上一篇stp 实验继续

理论看上一篇,我们直接实验 首先找出root 桥 很明显 sw1 为root 桥,所谓sw1  &a…

从Hinton获得今年的诺贝尔物理学奖说起

“深度人工智能”是成都深度智谷科技旗下的人工智能教育机构订阅号,主要分享人工智能的基础知识、技术发展、学习经验等。此外,订阅号还为大家提供了人工智能的培训学习服务和人工智能证书的报考服务,欢迎大家前来咨询,实现自己的…

JavaSE——集合1:Collection接口(Iterator和增强for遍历集合)

目录 一、集合框架体系(重要) 二、集合引入 (一)集合的理解与好处 三、Collection接口 (一)Collection接口实现类的特点 (二)Collection接口常用方法 (三)Collection接口遍历元素的方式(Iterator和增强for) 1.使用Iterator(迭代器) 1.1Iterator(迭代器)介绍 1.2Itera…

OmniH2O——通用灵巧且可全身远程操作并学习的人形机器人(其前身H2O是HumanPlus的重要参考)

前言 由于我司一直在针对各个工厂、公司、客户特定的业务场景,做解决方案或定制开发,所以针对每一个场景,我们都会反复考虑用什么样的机器人做定制开发 于此,便不可避免的追踪国内外最前沿的机器人技术进展,本来准备…