首页 > 编程语言 >Java中抽象类和接口的区别?

Java中抽象类和接口的区别?

时间:2023-04-26 12:01:57浏览次数:60  
标签:Java abstract 接口 public close 抽象类 void

什么是抽象类?

  • 抽象类是对具体概念的抽象
  • 抽象类本质是为了继承 只能被public或默认修饰
  • 行为层面抽象出来抽象方法

抽象类的注意事项

  • 抽象类不可以被直接实例化
  • 抽象类中可以存在构造方法
  • 抽象类可以存在普通方法

抽象方法的注意

  • 抽象方法必须定义在抽象类中
  • 仅声明 实现需要交给子类
  • 抽象方法不能用private修饰
//如何声明
abstract void func();

什么是接口?

  • 接口是一种规范
public interface inter{
	//声明方法和变量
	public abstract void func();//默认public abstract修饰
	int a=2; //默认public final static修饰 必须赋值操作
	defult void func1(){
		//default修饰可以实现方法
	}
	static void func2(){
		//static修饰可以实现方法
	}
}

语法层面的差别

  • 抽象类能够提供成员方法的实现细节。而接口中仅仅能存在 public abstract (可省) 方法;
  • 抽象类中的成员变量能够是各种类型的,而接口中的成员变量仅仅能是 public static final (可省) 类型的;
  • 一个类仅仅能继承一个抽象类,而一个类却能够实现多个接口
  • 抽象类的抽象程序介于类和接口之间

设计层面的差别

  • 抽象是对类抽象 接口是对行为抽象
  • 抽象类继承之间是'is not is'关系 接口是'has not has'关系
  • 抽象类可作为父类 属于模板式设计 接口是一种行为规范 辐射式设计
  • 纵向延申使用抽象类 横向扩展使用接口

引申例子说明

需求 门有open和close功能 要求门具有alarm功能 怎么实现

abstract class Door{
	abstract void open();
	abstract void close();
}
//或者
interface Door{
	void open();
	void close();
}
  • 火警器功能增加在抽象类中 可是不是所有门都有火警器功能!
  • 火警器功能增加在接口中 可是不是所有门都有火警器功能!

门的基本功能是open close 属于固有的特性 但是火警器功能是附加功能或者叫延申特性 因此最好的解决的方法是单独将报警设计为一个接口,包括alarm()行为,Door设计为单独的一个抽象类,包括open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口

interface Alram{
	void alram();
}
abstract class Door{
	abstract void open();
	abstract void close();
}
class AlramDoor extends Door,implement Alram{
	void open(){}
	void close(){}
	void alram(){}
}

标签:Java,abstract,接口,public,close,抽象类,void
From: https://www.cnblogs.com/odfive/p/17355217.html

相关文章

  • 若依vue框架添加kotlin依赖,实现kotlin和java混合编译
    第一步:在最外部pom.xml文件添加版本号和依赖管理properties添加版本号<kotlin.version>1.4.21</kotlin.version><!--启用kotlin增量编译--><kotlin.compiler.incremental>true</kotlin.compiler.incremental>dependencyManagement添加依赖管理<!-......
  • 【FAQ】关于JavaScript版本的华为地图服务Map的点击事件与Marker的点击事件存在冲突的
    一. 问题描述创建地图对象,并添加marker标记,对map和marker均添加了点击事件;<body><script>functioninitMap(){//创建地图对象constmap=newHWMapJsSDK.HWMap(document.getElementById('map'),{center:{lat:39.36322,lng:......
  • 关于使用tcpdump命令抓包时网络接口的查询与指定
    第一步:首先可以通过tcpdump命令的--list-interfaces选项,列出系统中的所有网络接口(这个与ipaddr列出的还有略有点点差异)-D--list-interfacesPrintthelistofthenetworkinterfacesavailableonthesystemandonwhichtcpdumpcancapturepackets.......
  • java面试题--核心知识
    一、HashMap和HashTable的区别?二、HashMap有哪些线程安全的方式?三、HashMap在扩容上有哪些优化? 难点三、为什么ConcurrentHashMap是线程安全的?四、java锁机制?无锁偏向锁轻量级锁重量级锁五、对AQS抽象队列同步器的理解?https://baijiahao.baidu.com/s?id=1709429801......
  • Java8 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Java8(又称为jdk1.8)是Java语言开发的一个主要版本。Java8是oracle公司于2014年3月发布,可以看成是自Java5以来最具革命性的版本。Java8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。Java8入门教程-从简单的步骤了解Java8,从基本到高级概......
  • JavaScript方法获取屏幕缩放比例与分辨率
    我们在开发一些前端页面的时候,会考虑到一些设备屏幕的兼容性问题,这个时候需要根据屏幕的分辨率以及缩放比例来进行实时的宽高设定,所以我总结了用JavaScript方法进行获取用户电脑屏幕的分辨率和缩放比例的数据:  获取屏幕缩放比例//获取屏幕缩放比例functiongetRatio(){......
  • Java的JDBC链接
    importjava.sql.*;//导入数据库操作的包,这种方式是将sql下面的所有的实体类都进行导入publicclassJDBCConnect{staticConnectionconnection=null;//characterEncoding=utf8设置编码格式为utf8,serverTimezone=GMT+8设置时区,在mysql8.0+的url需要添加时区,该......
  • java-计算发送时间
    packagecn.com.fl.service.utils;importcn.com.doone.tocloud.tools.MyLogUtil;importcn.com.doone.tocloud.tools.MyLogger;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.*;publicclassComputeSendTimeUtil{......
  • java成员变量在堆_java的基本类型的成员变量在栈还是堆?
    转、:java成员变量在堆_java的基本类型的成员变量在栈还是堆? 先说结论,放在堆中只要是成员变量,所在的类被实例化,不管是不是基础类型都会放在堆中第一个结论就是错的基本数据类型是放在栈中还是放在堆中,这取决于基本类型声明的位置。第一种:在方法中声明的变量,即该变量是......
  • Spring注入接口,接口多个实现类调用哪个实现类的三种方案
    https://blog.csdn.net/JingXu1114/article/details/124747047代码所示:···@AutowiredUserServiceuserService···在这个接口有多个实现类的情况下三种方式定义调用实现类:方法1:···`@Autowired UserServiceuserServiceImpl_1`···在变量名中直接写成想要调用......