抽象类abstract与接口interface区别代码实战演示——观止

本文主要是介绍抽象类abstract与接口interface区别代码实战演示——观止,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

请自己阅读以下代码,每个修饰符我都仔细斟酌写上去的,都很有考究。

笔者为了写好这篇文章,查阅了很多相关资料,以求总结地准确和全面,花了很多工夫,希望大家珍惜。

把这些代码读懂了,抽象类与接口的区别你就过关了。

你能通过这些代码很直观地总结出所有抽象类和接口的性质及区别,面试这个知识点基本逃不过下面的代码。

为什么我只放代码,不直接写出结论让大家直接观阅呢?

因为你直接看结论,记不住!!!过两天你就忘记了。这东西本来没可遵循的规律,记忆点还多,如果你不懂底层源码那忘记更快。

你可以对着我亲自实验的代码,自己总结规律。

最好的办法,是把这些代码拿走,自己动手实验,再总结,这样印象更深刻。

建议收藏本文以便时不时实践、复习一下。

等你熟悉到一定程度,只需浏览、对比一下代码就能迅速想起来所有的区别点。

以下所有测试基于jdk1.8,且所有类在IDEA里都不报错。

抽象类: 

//抽象类不能用final、private、static修饰
public abstract  class TestAbstract {//可以有有参和无参构造器,但必须有方法体public TestAbstract() {}public TestAbstract(String s,int d){this.s = s;this.d = d;}public String s;//成员属性不可定义为abstractprivate int d;//可为privateprivate  static int ds;//静态属性可不初始化private final static int q = 0;//final修饰必须初始化//可以有静态块static {
//        public int d;//不能为public
//        private String as;//不能为private
//        protected int b;//不能为protected
//        static int d = 0;//不能为staticint a;//可不初始化}//private修饰时只能带方法体,不能转为抽象方法,即abstract不能与private、static、final共存private String abs() {return null;}
//    public String abp() ;//public修饰时要么抽象方法要么有方法体//    private abstract String pa();//不能是私有抽象方法//抽象方法必无方法体,且可没有抽象方法,abstract不能与private、default、static、final共存protected abstract  String pa();//static 不能与abstract、default共存,且必带方法体private static String pas() {return null;}//可以final修饰private final static String psv() {return null;}
//不能有default修饰的方法/*default String hu() {return null;}*///final不能与default共存private final int f() {return 0;}//内部抽象类可以用static、private修饰,但是不能用final修饰,抽象类可实现接口,不能继承抽象类TestAbstractprivate abstract  static class innerAbs implements testInterface {}//抽象类内部可定义接口,接口可继承接口(不可实现implements),不可继承抽象类TestAbstractprivate static interface innerAbsI extends testInterface {}
}

接口

//接口不能使用private、static、final修饰
public interface  testInterface {//    public testInterface();//无参构造器不被允许
//    public testInterface(String ww);//有参构造器不被允许int dig=0;public final static String s = null;//不可为private、protected且成员变量必须初始化,但可以是public和缺省符static final String  sw=null;final String ww = null;//final可有可无,但变量必须赋值//    private static String ss = new String();//不能为private//不允许静态块/*static {String s = "";}*///public abstract  int a ;//不允许为抽象属性abstract String asb();//可有抽象方法,且不能有方法体,abstract不能与private、protected、default、static、final共存//静态方法必须有方法体,static不能与default、private、protected、abstract、final共存static String qq() {return null;}//    public String d(){};//无static就不能有方法体int dd();//default修饰必须要有方法体,default不可与abstract、static、final共存default int d() {return 0;}
//    private String df();//方法不能是private和protected的
//    public static final  t(){};//方法中final不能与static共存
//接口内部抽象类不能被private、final修饰,不能继承抽象类TestAbstractabstract static class innerIAbs implements testInterface {}
//内部接口不能被private、final修饰,接口可继承接口,但不可实现implements接口,不能继承抽象类,static  interface innerI extends testInterface {}
}

外部测试抽象类:

//如果TestAbstract类的构造是私有的,抽象类则不能继承,此处可继承抽象类(也可继承实体类)、可实现接口
public abstract class testAbs extends TestAbstract implements testInterface{public static void main(String[] args) {}
}

外部测试接口:

//外部接口还是只能继承接口不能实现,不能继承抽象类和实体类
public interface testInt extends testInterface {public static void main(String[] args) {}
}

普通测试类实现接口:

public class testI implements testInterface {@Overridepublic String asb() {return null;}@Overridepublic int dd() {return 0;}
}

普通测试类继承抽象类:

public class testA extends TestAbstract{@Overrideprotected String pa() {return null;}
}

还是挑重点总结一下吧:

(1)实现接口类必须实现(抽象类除外,如上述的抽象类testAbs)接口中所有的不带方法体的方法,即static和default修饰的方法除外;

(2)继承抽象类必须重写(抽象类除外,如上述的抽象类testAbs)他的所有抽象方法;

(3)接口定义的是对象的行为(即功能作用,能做什么),抽象类定义的是对象的本体组成(即是什么);

(4)接口要实现,抽象类要继承,一个类可以实现多个接口,但只能继承一个抽象类;

(5)接口可以继承接口,抽象类可以实现接口还可同时继承抽象类,抽象类也可以继承具体类,但接口不能。

(6)抽象类和接口都可以有静态的main方法;

(7)接口和抽象类中的抽象方法都不能有方法体;

(8)接口中可有default修饰的方法,抽象类不可以;

(9)接口和抽象类都不能使用private、static、final修饰;

(10)接口不能有有参和无参构造器,而抽象类都可以有;

(11)接口的成员变量不可以是private的,但抽象类可以;

(12)抽象类可由静态块,接口不能有;

(13)抽象类和接口都可以有静态方法,且都必须带方法体;

(14)抽象类中非抽象方法必带方法体,接口不必;

(15)接口和抽象类都可有非static、final修饰的普通成员变量;

参考(下面两篇文章中总结的有错误,以我代码试验为准):

https://blog.csdn.net/m0_38105216/article/details/85067156

https://blog.csdn.net/qq_44543508/article/details/102609910

这篇关于抽象类abstract与接口interface区别代码实战演示——观止的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743452

相关文章

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em