首页 > 其他分享 >abstract class 和 interface 有什么区别

abstract class 和 interface 有什么区别

时间:2023-11-15 10:56:52浏览次数:26  
标签:abstract 接口 public 抽象 interface 抽象类 方法 class

目录

abstract class 和 interface 有什么区别

1.抽象类

抽象类:声明方法的存在而不实现的类,如果一个类中没有包含足够的信息来描绘一个具体的对象,它只能被继承,派生出子类,这样的父类就是抽象类。

1.1抽象类的格式

[public] abstract class 类名 [extends父类] [implements接口列表]
{
    //属性声明及初始化;
    //抽象方法的声明;
    //非抽象方法声明及方法体;
}

1.2抽象类注意事项

1.修饰抽象类的修饰符有public和默认修饰符两种;

2.抽象类中可以有抽象方法,也可以有非抽象的方法;

3.抽象方法是无方法体的方法。

4.定义抽象类时,要在关键字class的前面添加abstract。

5.抽象类不能被实例化;

6.其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;

7.抽象方法不能为static;

8.在下列情况下,一个类必须声明为抽象类:

  1. 当一个类的一个或多个方法是抽象方法时;
  2. 当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
  3. 当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;

2.接口

由于类的多继承能够导致方法调用的冲突,所以Java中的类只能单继承。但是很多时候还是需要多继承的,Java中的接口就可以实现多继承,接口中不存在具体方法,不会引起方法调用的冲突。instanceof运算符可以用来决定某对象的类是否实现了接口

2.1接口的格式

[public] interface 接口名 [extends 父接口列表]{
     // 属性声明,不写也是公共常量
     [public] [static] [final] 属性类型属性名 = 常量值 ;
     // 方法声明
     [public] [abstract] 返回值类型方法名 ( 参数列表 ) ;
}

1.接口中只包含常量和抽象方法,而没有变量和方法的实现,接口对类来说是一套规范,是一套行为协议。
2.接口不是一个类,不能实例化。
3.接口规定了类的共同行为。
4.在Java中,接口的声明采用interface关键字,接口不是一个类,没有构造方法,不能被实例化。
5.修饰接口的修饰符只有public和默认修饰符两种,不写也是public的
6.接口可以是多继承,接口只能继承接口,不能继承类。
7.属性必须是常量(有初值),方法必须是抽象的(无方法体)。

2.2接口可以多继承

//B,C也是接口
public interface A extends B,C {
}

2.3接口的实现(implements)

如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类,多个无关的类可以实现一个接口,一个类可以实现多个无关的接口,一个类可以在继承一个父类的同时,实现一个或多个接口。

class 类名 [extends 父类] [implements 接口列表]
{
 覆盖所有接口中定义的方法;
}

3.异同

相同:子类必须实现它门的抽象方法,抽象类与接口都不能创建自己的对象
不同:继承使用extends,接口的实现用implements
抽象类可以没有抽象方法,接口中方法都是抽象的
抽象类可以有自己构造器及普通方法,接口中没有构造器
子类只能继承一个抽象类,但可以实现多个接口
抽象类主要通过共享的属性,接口主要提供共享的方法

标签:abstract,接口,public,抽象,interface,抽象类,方法,class
From: https://www.cnblogs.com/qy-blog/p/17833338.html

相关文章

  • js:React中使用classnames实现按照条件将类名连接起来
    参考文档https://www.npmjs.com/package/classnameshttps://github.com/JedWatson/classnames安装npminstallclassnames示例importclassNamesfrom"classnames";//字符串合并console.log(classNames("foo","bar"));//foobar//对象合并console.lo......
  • Programming abstractions in C阅读笔记:p184-p195
    《ProgrammingAbstractionsInC》学习第61天,p184-p195总结。一、技术总结1.mutualrecursion2.naturalnumber(1)定义p184,Ifyoulimitthedomainofpossiblevaluestothesetofnaturalnumbers,whicharedefinedsimplyasthesetofnonnegativeintegers.3.最大公约......
  • ts interface
    在TypeScript中,接口(interface)用于定义对象的结构,可以描述对象的属性、方法等。下面是一个简单的例子,演示如何使用TypeScript接口://定义一个接口表示一个人的信息interfacePerson{firstName:string;lastName:string;age:number;sayHello:()=>void;}//......
  • 关于.UnsupportedClassVersionError: org/example/Merge has been compiled by a more
    问题描述之前我是改变了本机上面的JDK的版本17为8;然后这次我再次尝试MapReduce运行就报错了;尝试更改IDEA中的环境JDK为8,还是一直显示这个错误~~~问题解决根本问题在pom.xml文件这里,里面有定义我们使用的JDK的版本,只要将其中的17改为8,然后再运行,就没有问题啦!!......
  • Programming Abstractions in C阅读笔记:p196
    《ProgrammingAbstractionsinC》学习第63天,p196总结。涉及到编程之外的知识,依然是读起来很费劲,需要了解作者在书中提到的人物(EdouardLucas)、地点(Benares)、神话传说(Brahma)等等。虽然深知自己做不到对人文知识,历史知识精通,但也希望能记住,从而在下次遇到的时候能够阅读下去......
  • ABAP None-Class-Based 异常处理的一些局限性介绍试读版
    本教程前一篇文章,我们已经学习了ABAP里Non-Class-Based异常的使用方法:113.ABAP异常处理(ExceptionHandling)-什么是Non-Class-Based异常从历史上来说,SAPABAP先有Non-Class-Based异常,再有Class-Based异常的解决方案。从道理上分析,前者必定有一些使用上的缺陷,......
  • class是js关键字,jsx中要用className
    下面的JSX代码中,哪一个无法达到预期的效果?AHelloWorldBC{msg}DLeoEF正确答案:C选cclass是js关键字,这里要用className。对于E选项,在jsx中直接写行内样式时不能采用引号,而是style={{color:'red'}}的方式选择C,在jsx里面,要把class换成className才能正确编译,表......
  • 论文阅读:Adaptive Hierarchical Down-Sampling for Point Cloud Classification
    AdaptiveHierarchicalDown-SamplingforPointCloudClassification用于点云分类的自适应分层下采样法摘要深度神经网络中无序点云的确定性下采样到目前为止还没有得到严格的研究。现有的方法对点进行下采样,而不考虑它们对网络输出的重要性,并且经常在处理前对原始点云进行下采样......
  • js常见的继承方式包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继
    js常见的继承方式包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承,以及ES6新增的class继承,但不包括关联继承https://www.cnblogs.com/Leophen/p/11401734.html构造函数继承是每次继承都会把父类的所有属性方法全部拷贝一份,而对于公用的方法......
  • Java JNI(Java Native Interface)攻击原理研究
    一、JavaJNI简介0x1:JNI是什么JNI(JavaNativeInterface,Java本地接口)是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用/或库,也可以被其他程序调用。本地程序一般是用其它语言(C、C++或汇编语言等)编写的,并且被编译为基于本机硬件和操作系统的程序。0x2:为什么需要JNI......