Java中抽象类与接口的区别

java中抽象类和接口的区别 https://blog.youkuaiyun.com/ooppookid/article/details/51173179 1、接口和抽象类有什么区别 在Java语言中,抽象类abstract class和接口interface是抽象定义的两种机制。 正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。抽象类abstract class和接口interface在对于抽象定义方面具有很大的相似性,甚... 阅读详情

Java中抽象类和接口在使用上如此相似,在高级开发中应该如何使用两者,本文对抽象类和接口的区别做如下总结。

一、抽象类

1.定义

抽象类:包含一个抽象方法的类称为抽象类,在方法头中使用abstract修饰符表示

abstract class A{
	public abstract void fun();
};
public class AbstractDemo01{
	public static void main(String[] args) {
		A a = null;//声明对象
		a = new A();//出错,不能直接进行实例化操作
	}
};

2.抽象类继承

对于抽象类,不能直接进行实例化的操作,但是可以声明,如果想使用抽象类,则必须依靠子类,抽象类是必须被子类继承的,而且被继承的子类需要实现抽象类中的全部抽象方法


abstract class Person{
	public abstract void fun();
};
class Student extends Person{//继承抽象类
	public void fun(){//覆写方法时需要注意访问控制权限
		System.out.println("Hello World!");
	}
};

public class AbstractDemo02{
	public static void main(String[] args) {
		Student s = new Student();
	}
	
};

3.抽象方法

抽象方法只有定义而没有实现,抽象类中允许有构造方法,但是此构造方法时不能直接调用的,交给子类去调用,子类对象的实例化过程中,先调用父类中的构造方法

abstract class Person{
	private String name ;
	public Person(String name){	//构造方法
		this.name = name ;
	}
	public String getName(){
		return this.name ;
	}
	public abstract void fun() ;
};
class Student extends Person{	//继承抽象类
	public Student(String name){
		super(name) ;
	}
	public void fun(){	//覆写方法时需要注意访问控制权限
		System.out.println(super.getName()) ;
	}
};
public class AbstractDemo03{
	public static void main(String args[]){
		Student s = new Student("GEEKFANR") ;
		s.fun() ;
	}
};

4.抽象类的应用

从对象多态性的改变上来看,子类为父类实例化是一个比较容易的操作,因为可以发生自动的向上转型关系,那么调用的方法永远是被子类覆写过的方法

abstract class Person{
	private String name ;//姓名属性
	private int age ;//年龄属性
	public Person(String name,int age){//工人和学生都有姓名和年龄
		this.name = name ;
		this.age = age ;
	}
	public String getName(){
		return this.name ;
	}
	public int getAge(){
		return this.age ;
	}
	public void say(){//说话是一个具体的功能,不同的人物说话内容由各个子类单独实现
		System.out.println(this.getContent()) ;	
	}
	public abstract String getContent() ;
};
class Student extends Person{//继承抽象类
	private float score ;
	public Student(String name,int age,float score){
		super(name,age) ;
		this.score = score ;
	}
	public String getContent(){//Student类覆写Person类的getContent()抽象方法
		return "学生说我叫:" + super.getName()
			+ ",我今年:" + super.getAge()
			+ ",我的成绩:" + this.score ;
	}
};
class Worker extends Person{//继承抽象类
	private float salary ;
	public Worker(String name,int age,float salary){
		super(name,age) ;
		this.salary = salary ;
	}
	public String getContent(){{//Worker类覆写Person类的getContent()抽象方法
		return "工人说我叫:" + super.getName()
			+ ",我今年:" + super.getAge()
			+ ",我的工资:" + this.salary ;
	}
};
public class AbstPolDemo{
	public static void main(String args[]){
		Person per1 = new Student("大队长",20,89.0f) ;
		Person per2 = new Worker("张全蛋",30,5189.0f) ;
		per1.say() ;
		per2.say() ;
	}
};

二、接口

1.定义

接口是一个特殊的类,在Java中接口是由抽象方法和全局常量组成

interface A{
	public static final String INFO = "GEEKFANR" ;	// 全局常量
	public abstract void fun() ;	// 抽象方法
}

2.接口继承

接口与抽象类一样,需要有子类,此时不再称为继承类,而是实现接口,通过implements关键字完成,接口继承本质上与类继承相同。

interface A{
	// public static final String INFO = "GEEKFANR" ;//简化操作
	String INFO = "GEEKFANR" ;	// 全局常量
	// public abstract void print() ;//简化操作
	void print() ;	// 抽象方法
	public void fun() ;	// 抽象方法
}
class B implements A{	// 子类B实现了接口A
	public void print(){	// 实现抽象方法
		System.out.println("HELLO WORLD!!!") ;
	}
	public void fun(){
		System.out.println(INFO);	// 输出全局常量
	}
};
public class InterfaceDemo02{
	public static void main(String args[]){
		B b = new B() ;
		b.print() ;
		b.fun() ;
	}
};

注意:由于接口中所有的数据域都是public final static而且所有的方法都是public abstract,所以Java允许忽略这些修饰符,简化操作。

3.接口的多继承

Java只允许为类的扩展做单一继承,但是允许使用接口做多重继承

interface A{
	String INFO = "CHINA" ;	// 全局常量
	void print() ;	// 抽象方法
	public void fun() ;	// 抽象方法
}
interface C{
	public void funA() ;
}
class B implements A,C{	// 子类B实现了接口A
	public void print(){	// 实现抽象方法
		System.out.println("HELLO WORLD!!!") ;
	}
	public void fun(){
		System.out.println(INFO);	// 输出全局常量
	}
	public void funA(){
		System.out.println("信息:" + INFO) ;
	}
};
public class InterfaceDemo03{
	public static void main(String args[]){
		B b = new B() ;
		b.print() ;
		b.fun() ;
		b.funA() ;
	}
};

4.接口的灵活性

一个接口虽然不可以继承一个抽象类,但是一个接口却可以同时继承多个接口

interface A{
	public void printA() ;
}
interface B{
	public void printB() ;
}
interface Z extends A,B{	// X接口同时继承了A和B两个接口
	public void printZ() ;
}
abstract class C{
	public abstract void printC() ;
};
class X extends C implements Z{
	public void printA(){}
	public void printB(){}
	public void printC(){}
	public void printZ(){}
};
public class InterfaceDemo04{
	public static void main(String args[]){
		B b = new B() ;
		b.print() ;
		b.fun() ;
		b.funA() ;
	}
};

5.接口的应用

接口可以通过对象多态性进行对象的实例化操作

interface USB{
	public void start() ;	// 开始工作
	public void stop() ;	// 结束工作
}
class Computer{
	public static void plugin(USB usb){
		usb.start() ;
		usb.stop() ;
	}
};
class Flash implements USB{
	public void start(){
		System.out.println("U盘开始工作。") ;
	}
	public void stop(){
		System.out.println("U盘停止工作。") ;
	}
};
class Print implements USB{
	public void start(){
		System.out.println("打印机开始工作。") ;
	}
	public void stop(){
		System.out.println("打印机停止工作。") ;
	}
};
public class InterPolDemo{
	public static void main(String args[]){
		Computer.plugin(new Flash()) ;
		Computer.plugin(new Print()) ;
	}
};

三、总结

No.比较点抽象类接口
1组成抽象方法、普通方法、常量、变量、构造方法、全局常量抽象方法、全局常量
2定义abstractinterface
3子类子类通过extends继承抽象类子类通过implents实现接口
4限制一个子类只能继承一个抽象类一个子类可以同时实现多个接口
5关系一个抽象类可以实现多个接口一个接口不能继承一个抽象类只能实现多个接口
一个抽象类中可以包含多个接口一个接口中可以包含多个抽象类
6设计模式模板设计工厂设计、代理设计
两个一起操作可以完成适配器设计
7实例化通过对象的多态性,通过子类进行对象的实例化操作通过对象的多态性,通过子类进行对象的实例化操作
8实现限制存在单继承局限不存在此类局限
9特性-表示一个标准、一种能力

因为接口可以避免单继承的局限,如果抽象类和接口同时都可以使用的话,优先使用接口

【大唐杯学习超快速入门】5G技术原理仿真教学——5G网络开通调测与车联网 自用笔记,比较乱。 阅读详情

相关推荐

【理解机器学习算法】之Clustering算法(Agglomerative Clustering)

是一种层次聚类算法,通过逐步合并或“聚集”它们来构建嵌套聚类。这种方法采用自底向上的方式构建聚类层次:它从将每个数据点作为单个聚类开始,然后迭代合并最接近的聚类对,直到所有数据点合并为一个聚类,或直到达到指定的聚类数量。优点:- 聚合聚类在距离和连接准则的选择上具有多样性,使其适用于各种数据集。- 它产生了一个层次结构,这对于不同规模的聚类数据结构是有信息量的。-缺点:- 对于大数据集来说,它可能计算成本高,因为它需要在每次迭代中计算和更新所有聚类对之间的距离。

Hyman Qiu 2688

Java抽象类和接口的详细区别(全)

这两者经常在笔试以及面试中经常问及,甚至在项目实战中还在纠结用哪一种类型今天就此问题详细剖析一下以往我的文章中也有稍微提及:java框架零基础从入门到精通的学习路线(超全)此处将其这些文章抽离公共部分,详细总结下这两概念此处的总结偏向于两者概念的总结,将其制作成表格抽象类是半抽象的,有构造方法,只允许出现常量和抽象方法。类和类之间只能单继承,一个抽象类只能继承一个类(单继承)。接口是完全抽象的,没有构造方法,接口和接口之间支持多继承,一个类可以同时实现多个接口比较内容抽象类。

码农研究僧的博客 2万+

一文讲透 .claude/ 文件夹:Claude Code 团队配置指南和最佳实践

本文系统梳理了ClaudeCode配置框架,旨在解决实际落地中的常见困惑。文章从五层作用域体系(组织策略、命令行参数、本地覆盖、项目级、用户级)切入,详细解析了CLAUDE.md、rules、skills、agents等核心组件的定位与配合关系。重点强调了"确定性规则"与"概率性建议"的分层设计:权限控制和安全边界应通过settings.json和hooks实现,而工作约定和编码规范适合放在CLAUDE.md。文中提供了可直接套用的最小配置方案,并总结了10大常见踩坑

974

java接口、接口方法、接口属性 的修饰符详解

java接口的修饰符:abstract(默认不写。interface本身就是抽象的,加不加abstract都一样) 接口中字段的修饰符:public static final(默认不写)   解释如下: public: 使接口的实现类可以使用该常量; static:接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态变量。        ...

Cheung's house 2万+

量化人必看|miniQMT踩坑记:回测太慢?一招教你把行情数据“搬回家”!

这篇文章主要聊的是。

奔跑的蜗牛 3476

FreeRTOS实战:如何避免HAL_Delay在高优先级中断中的坑(附TIM6配置指南)

本文深入剖析了在STM32 FreeRTOS项目中,于高优先级中断内调用HAL_Delay函数导致系统假死的根本原因——SysTick时基被FreeRTOS占用且优先级最低。文章提供了治本方案:通过配置TIM6作为独立且最高优先级的HAL时基,实现与FreeRTOS系统心跳的解耦,并附上详细的CubeMX配置与代码移植指南,确保系统实时性与稳定性。

weixin_29230059的博客 64

java提高篇(四)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。 一、抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果...

chenssy 的技术博客 2001

vue 插件vue-awesome-swiper实现 三张图片,左右两边显示一半的效果的示例

希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

weixin_50450473的博客 3245

java-抽象类和接口的区别

抽象类和接口的区别是什么一、区别1、抽象类要被子类继承,接口要被类实现。2、接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。4、接口是设计的结果,抽象类是重构的结果。5、抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。6、抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。7、抽象类主要用来抽象类别,接口主要用来抽象功能。 一、区别 1、抽象类要被子类继承,接口要被类实现。 2、接口只能做方法声明,抽

weixin_43846708的博客 4753

ICC2: 如何让CTS指定pin多长指定长度

这里create_clock不需要写到sdc里,在脚本里写就行,需要注意的是脚本里存在remove_clock_tree的话,add_buffer就要放remove_clock_tree后面,或者给guide buffer设don't touch也行。跟innovus的操作逻辑一样,如果要让tree上的某一点长长,要先考虑这个点后面的clock tree能正常balance。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?-5意味着长长5ns,相反正值意味着做短。

m0_61544122的博客 679

【异常】OpenClaw 连接异常This site can‘t be reached 127.0.0.1 refused to connect Try: Checking the proxy

在访问OpenClaw相关服务时,浏览器提示如下异常信息,无法正常加载页面:Try:补充说明:该报错仅出现于本地访问场景(127.0.0.1为本地回环地址),涉及OpenClaw核心服务的本地连接交互,无外部网络及敏感信息泄露风险。

奶爸的编程之路,也就一周冷个三天 1483

Java中抽象类和接口的区别,一文弄懂,图文并茂

Java是一种面向对象的编程语言,Java中的抽象类和接口是两种常见的抽象概念,它们都能够帮助我们实现抽象化和多态性,但是它们在一些细节上有所不同。本文将详细介绍Java中抽象类和接口的定义、区别和使用,并提供相应的代码示例。抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类具有类的所有特性,包括成员变量、成员方法、构造方法等,但是其中的某些方法是抽象的,需要在具体的子类中实现。抽象方法没有方法体,只有方法签名,用abstract关键字修饰。

向诸位大佬虚心学习 7151

【C语言】一文带你拿捏分支和循环语句(一万字详细讲解)

if/switch语句、while/fo/do...while循环语句、goto语句详解

StackFrame 1233

Java中抽象类与接口有什么区别

理解抽象 abstract class和interface是Java中对于抽象类定义两种机制,正是由于这两种机制的存在,才赋予Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有相当大的相似性,设置可以互相替换,因此在进行抽象类定义时显得比较随意。 其实,两者还是由差别的,对于他们的选择设置反映出对于问题空余本质的理解,对于涉及意图的理...

xiaoxu9522的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java中接口和抽象类的区别

金三银四马上就到了,希望大家能好好学习一下这些技术点学习视频:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!面试真题:[外链图片转存中…(img-y4cDQOKR-1711982952870)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

WJud11的博客 671

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java中抽象类和接口的区别

从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。

2401_84003630的博客 922

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java中抽象类跟接口的区别

Java中抽象类和接口的区别 抽象类: 含有abstract修饰符的class 即为抽象类, abstract类不能创建实例对象, 含有abstract的方法的类必须定义为abstract class , abstract class 里的方法不必是抽象的, 抽象来中定义抽象方法必须放在具体子类中实现,所以,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有方法,那

Super的专栏 1209

java基础之接口与抽象类的区别

java基础之接口与抽象类的区别         抽象类,包含一个抽象方法的类就是抽象类。什么是抽象方法呢?声明而未被实现的方法,抽象方法必须用abstract关键字,抽象类不能直接实例化,都是通过它的子类,即继承抽象类的类来实例化的,而且子类必须重写抽象类中的所有抽象方法。         接口,接口的关键字是interface,接口中的成员变量必须是静态的,而且必须是被初始化的,接口中的方

程序员成长指北 2905

java接口与抽象类区别

很久没有看到如此精辟的文章了!作者写得实在太好了!正在学JAVA或者想了解抽象类与接口的朋友,绝对不可错过!本人极力推荐! OOP中接口与抽象类的区别 Java语言接口与继承的本质 深入理解接口和抽象类   OOP中接口与抽象类的区别 OOP中的INTERFACE和ABSTRACT CLASS是两个不同的概念 我们在使用的时候往往将两个混在一起使用,不做什么区别,大家可能在定义上对

2644

Java的接口和抽象类区别

一、抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstract void fun(); 抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 下面要注意一个问题:在《J...

孤独没有颜色 169

Java抽象类和接口的区别

抽象类接口核心目的:构建类层次结构核心目的:定义行为标准关键优势:代码复用 + 状态封装关键优势:灵活性 + 解耦典型场景Animal→DogCat典型场景RunnableCloneable💡经验法则优先用接口(更灵活、解耦、易扩展)当需要共享代码或状态时,改用抽象类Java 8 后两者功能趋近,但设计思想不变。

走过冬季 673

Java总结:抽象类、接口以及抽象类和接口的区别

Java中抽象类和接口的区别会是很多公司的必问面试题之一,我们必须牢牢掌握。

鄙人kunzhi96,感恩遇见! 864
上一篇: 用MyBatis三剑客实现一个简单的电商信息管理系统
下一篇: 数据库的部分依赖,完全依赖,传递依赖以及三种范式总结
极客范儿
极客范儿 新星创作者: 游戏开发技术领域 新星创作者: 游戏开发技术领域 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄12年 1万+粉丝 341原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值