二十八、Java接口与抽象类(java接口和抽象类的区别是什么)
cac55 2024-09-20 12:42 45 浏览 0 评论
在Java面向对象编程中,接口(Interface)和抽象类(Abstract Class)都是实现代码复用和扩展性的重要工具。提供了定义一组相关方法的机制,而不需要提供具体的实现。
接口的概念与特点
接口是一种引用类型,是方法的集合,可以被类实现。接口定义了一组方法的签名,但没有提供具体的实现。实现接口的类必须提供接口中所有方法的具体实现。
接口的主要特点:
序号 | 特点 |
1 | 接口不能被实例化,只能被类实现(implements)。 |
2 | 接口中的方法默认是公开的(public)和抽象的(abstract),不需要显式声明。 |
3 | 接口中不能包含构造方法、初始化块和实例字段。 |
4 | 一个类可以实现多个接口,从而实现多重继承的效果。 |
接口中的元素或使用:
元素或使用 | 描述 |
定义关键字 | 使用interface关键字定义接口。 |
方法 | 接口中所有的方法默认都是抽象的(public abstract) |
成员变量 | 接口中的变量默认是public static final的,即接口常量,必须在声明时初始化。 |
继承限制 | 一个接口可以继承多个接口,但不能继承类。 |
实现方式 | 类通过implements关键字来实现接口,一个类可以实现多个接口。 |
在Java 8及以后版本接口中可以有静态方法(static)、默认方法(default)和私有方法(private)。
- 静态方法可以直接在接口内部实现。
- 默认方法提供了一个默认的行为实现,实现接口的类可以选择是否覆盖这个方法。
- 私有方法仅限接口内部使用。
约束与纯粹抽象:
接口主要用于定义一组方法签名,强制实现类提供这些方法的具体实现,是一种严格的契约。接口不能包含实例变量,除了静态常量之外。
定义接口
接口是一种完全抽象的类型,只包含抽象方法(在Java 8及以后版本中还可以包含默认方法和静态方法)和常量(默认为public static final)。接口中的方法默认都是public abstract的。
示例:
public interface AnimalBehavior {
void eat();
void move();
default void introduce() {
System.out.println("I am an animal with behaviors.");
}
static void describe() {
System.out.println("Describing animal behavior...");
}
}
接口的继承与实现
类通过关键字 implements来实现接口,一个类可以实现多个接口,从而实现多重继承的效果。
示例
public class Dog implements AnimalBehavior {
@Override
public void eat() {
System.out.println("Dog is eating.");
}
@Override
public void move() {
System.out.println("Dog is moving.");
}
}
接口的多继承
在Java 8之前,Java接口并不支持多继承,即一个接口不能同时继承多个接口。但从Java 8开始,接口可以实现多继承,也就是说,一个接口可以同时继承多个接口,通过逗号分隔开各个接口名称:
示例:
interface InterfaceA {
void methodA();
}
interface InterfaceB {
void methodB();
}
// Java 8及以后版本支持的接口多继承
interface InterfaceC extends InterfaceA, InterfaceB {
void methodC();
}
class Implementation implements InterfaceC {
@Override
public void methodA() {
// 实现methodA
}
@Override
public void methodB() {
// 实现methodB
}
@Override
public void methodC() {
// 实现methodC
}
}
在上述代码中,`InterfaceC`继承了`InterfaceA`和`InterfaceB`,因此实现`InterfaceC`的`Implementation`类必须实现来自这三个接口的所有抽象方法。
注意:尽管接口可以多继承,但类仍然只支持单继承(即一个类只能直接继承一个类,但可以实现多个接口)。同时,接口的多继承不会出现类似类继承中的菱形问题,因为接口中不存在状态(实例变量),只有方法声明,因此不会出现二义性问题。
抽象类的概念与特点
抽象类是一种不能被实例化的类,主要用于定义一组相关方法的通用行为,并提供部分实现。抽象类可以包含抽象方法和非抽象方法,其中抽象方法没有具体的实现,需要由子类来提供。
抽象类的主要特点:
序号 | 特点 |
1 | 抽象类不能被实例化,只能被其他类继承(extends)。 |
2 | 抽象类中可以包含抽象方法和非抽象方法,抽象方法必须在子类中被实现。 |
3 | 抽象类中可以包含构造方法、初始化块和实例字段。 |
4 | 一个类只能继承一个抽象类,从而实现单继承的效果。 |
抽象类中的元素或使用:
元素或使用 | 描述 |
定义关键字 | 使用abstract关键字定义抽象类。 |
方法 | 抽象类可以包含抽象方法(abstract method)和非抽象方法。抽象方法没有方法体,必须由子类去实现;非抽象方法在抽象类中可以直接给出实现。 |
成员变量 | 抽象类中可以定义任何类型的变量,并且可以有不同的访问修饰符。 |
继承限制 | 一个类只能继承一个抽象类,但可以通过多层继承间接实现多个抽象类的功能。 |
构造器 | 抽象类可以有构造器,用于子类实例化时调用。 |
实现方式 | 类通过extends关键字来继承抽象类,如果子类没有完全实现抽象类中的所有抽象方法,则子类也必须声明为抽象类。 |
部分实现与扩展:
抽象类允许提供部分实现,子类可以继承并扩展抽象类的现有实现。抽象类的目的是为子类提供一种模板,子类可以专注于特定部分的实现。
定义抽象类
抽象类是可以包含抽象方法和非抽象方法(即具体实现的方法)的类,使用abstract关键字声明。抽象类可以有实例变量,并且可以有自己的构造方法。
示例:
public abstract class Animal {
protected String name;
public Animal(String animalName) {
this.name = animalName;
}
public abstract void makeSound();
public void sleep() {
System.out.println("Animal is sleeping.");
}
}
抽象类的继承与实现
类通过关键字extends来继承抽象类,并且必须实现抽象类中所有的抽象方法,除非此类也被声明为抽象类。
示例:
public class Dog extends Animal {
public Dog(String dogName) {
super(dogName);
}
@Override
public void makeSound() {
System.out.println("Dog says Woof!");
}
}
接口与抽象类的使用场景
- 接口通常用于定义一组行为规范,这些规范可以由多个不相关的类来实现。例如,在Java的集合框架中,List、Set和Map等接口定义了不同的集合类型,它们可以由不同的类来实现。
- 抽象类通常用于定义一组具有共同特征的类的通用行为。这些类之间存在一定的关系,可以通过继承抽象类来共享代码和行为。例如,在图形绘制中,Shape类可以作为一个抽象类,定义了绘制形状的一些通用方法,而Circle、Rectangle等类则继承Shape类并实现具体的绘制逻辑。
接口与抽象类的区别与联系
区别:
序号 | 区别 |
1 | 接口是一种纯粹的抽象,它只定义方法签名,不包含任何具体实现。而抽象类可以包含部分实现,子类可以通过继承来复用这些代码。 |
2 | 一个类可以实现多个接口,但只能继承一个抽象类。这意味着接口可以实现多重继承的效果,而抽象类则遵循Java的单继承原则。 |
3 | 接口中的方法默认是公开的,而抽象类中的方法可以是公开的、受保护的或默认的。 |
语义区别:
描述 | |
接口 | 更侧重于定义一组行为规范,强调的是外部可见的API或者组件之间的交互契约,体现了设计上的“角色”概念,关注的是对象能够做什么。 |
抽象类 | 更像是一个相对完整的类模板,既可以定义抽象方法强制子类实现,也可以提供已实现的方法和属性,更适合定义一个类族的共性部分,体现的是“类别”或“等级”的概念。 |
联系:
序号 | 联系 |
1 | 接口和抽象类都是用于定义抽象行为的工具,它们都可以作为类型引用,用于声明变量、参数和返回值类型。 |
2 | 在某些情况下,接口和抽象类可以相互转换。例如,一个只包含抽象方法的抽象类可以很容易地转换为接口;反之,一个接口也可以添加默认方法来实现部分行为,从而类似于抽象类。 |
总结
接口和抽象类都是Java面向对象编程中重要的概念,它们为代码复用和扩展性提供了有力的支持。在实际开发中,我们应根据具体需求选择合适的工具来定义抽象行为。当需要定义一组行为规范并让多个不相关的类来实现时,可以使用接口;当需要定义一组具有共同特征的类的通用行为时,可以使用抽象类。
相关推荐
- 这些端口关闭后,系统会更安全!系统高危端口及其关闭方法?
-
在这高速发展的网络信息时代,信息安全显得非常重要,病毒、木马、非法侵入等安全事件经常发生。在我们使用电脑过程中,为了确保系统安全,以下高危端口必须关闭,防患于未然。一.Windows系统的445端口...
- 什么是安全组_什么是安全组件
-
安全组是一种虚拟防火墙,具备状态检测和数据包过滤功能,用于在云计算环境中设置网络访问控制,保护云服务器(ECS实例)、负载均衡、云数据库等资源。核心特性:虚拟防火墙:安全组控制云资源的出入站流量,决定...
- 针对单个网站的渗透思路(精)_网站渗透步骤
-
欢迎搜索公众号:白帽子左一每天分享更多黑客技能,工具及体系化视频教程(免费领首先,当我们拿到一个网站的域名或者IP的时候。最先要做的是信息收集。下面着重介绍一下信息收集模块一、信息收集——端口扫描与分...
- 风险突出的高危端口汇总 一网打尽 !
-
高危端口一直是攻击者关注的焦点,了解这些端口的风险、攻击方式及防护策略至关重要。一、文件传输类端口1.TCP20/21:FTP服务端口FTP(文件传输协议)用于文件的上传和下载。其明文传输特性使得...
- 指定IP地址进行远程访问服务器设置方法(windows系统)
-
我们有很多服务器经常受到外界网络的干扰,入侵者们通过扫描3389端口爆破密码非法进入我们的服务器,这时,我们可以配置服务器IP安全策略来限制一些IP访问,大大提高了服务器的安全。实验环境:服务端:...
- 服务器被黑,如何查找入侵、攻击痕迹呢?
-
本文出自头条号老王谈运维,转载请说明出处。引言:随着网络的越来越普及,使用的越来越频繁,木马病毒也随之侵入进来并且肆无忌惮。如何将病毒拒之门外,已成为我们普通大众必须具备的一项技能。这样,你才能使木马...
- win10 telnet命令怎么查看端口是否打开
-
可能大家也会遇到这个问题,win10telnet命令查看端口是否打开的步骤是什么?具体方法如下:1、键盘输入快捷键WIN+R,打开运行窗口。2、输入cmd,点击确定按钮。3、弹出cmd命令行窗...
- Crysis勒索病毒针对政企服务器攻击升级 腾讯安全展开全面防御
-
近日,腾讯安全御见威胁情报中心监测发现,Crysis勒索病毒在国内传播升级,感染数量呈上升趋势,该病毒主要通过RDP弱口令爆破传播入侵政企机构,加密重要数据,由于该病毒的加密破坏暂无法解密,被攻击后将...
- Windows端口详解,这几个端口不能开!
-
一、血泪警告这7个端口开着电脑秒变公共厕所445端口:勒索病毒专用通道永恒之蓝病毒最爱突破口,文件共享功能成致命漏洞。企业内网还敢用用,个人电脑开着就是作死135-139端口:网络邻居成内鬼,Wind...
- 网络通讯笔记_网络通讯笔记怎么写
-
网络通讯一、NIC(网卡)二、CMD命令提示符三、服务、协议与端口常见的计算机服务常见的计算机端口与协议四、DOS命令1、基本DOS命令五、地址一、NIC(网卡)网络接口控制器又叫网络适配器也就是...
- 服务器远程端口是什么意思?什么是服务器远程端口?
-
什么是服务器远程端口?如图:IP冒号后面的数字这就是服务器的一个远程端口服务器远程端口是什么意思?服务器远程端口是服务器通信服务中的一个服务端窗口号码,取值范围是1-65535.一个服务器里面包含服务...
- 服务器节点到底是啥?看完这篇全明白,旧电脑也能派上大用场
-
不少朋友看了我用旧电脑改服务器节点的文章,后台都在问:“服务器节点到底能干啥?”其实这东西没那么神秘,今天用大白话讲讲,看完你就知道家里的旧设备藏着多大潜力。服务器节点:网络世界的“小工位”简单说...
- 广东通管局预警:勒索病毒威胁“关键信息基础设施”,应高度警惕
-
来源:澎湃新闻据广东省通信管理局网站消息,广东省通信管理局5月12日发布了《关于勒索病毒对关键信息基础设施威胁的预警通报》。通报称,5月7日,美国最大燃油运输管道商“科洛尼尔”(ColonialP...
- 80端口和443端口是什么?服务器端口干什么用的?
-
80和443端口是最常见的2个端口,都是提供网络WEB浏览服务所需要的端口,一台服务器通过不同的端口,提供不同的服务。80端口服务:HTTP(HyperTextTransportProtocol)...
- 从单日网络安全风险看当前网络安全状况
-
一、核心结论(从单日数据看全局风险)通过对2025年8月18日这一天的非法访问数据深度分析,可以清晰看到:网络环境中的安全威胁呈现高频次、多目标、全球化三大特征。单日4557次非法访问尝试,覆盖22、...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)