Java 接口是抽象类吗?
我正在完成一些家庭作业,上一篇试卷上的一个问题要求命名给定UML图中的所有抽象类。我想,相当简单。有一个抽象类和三个接口。一般来说,这些接口是否有资格成为抽象类?
我正在完成一些家庭作业,上一篇试卷上的一个问题要求命名给定UML图中的所有抽象类。我想,相当简单。有一个抽象类和三个接口。一般来说,这些接口是否有资格成为抽象类?
问题是,虽然从技术上讲,接口可以表示为Java等语言中的类,但我不会将它们视为类。
抽象?地狱是的。类?哈哈
接口不能有构造函数,也不能有属性、字段、函数体等。接口不能被继承,它们是实现的(同样,从技术上讲,实现接口实际上是在特定语言中继承它,但这不是我的观点。接口更像是“契约”,因为它们不像类那样定义任何行为。
现在,如果这是一个家庭作业,那么你不应该真的和老师争论这些东西。只需检查您的讲义,看看“班级”一词是否在老师对界面的定义中被提及。
所有界面确实是抽象的
实际上,您可以在接口中将方法声明为抽象方法...除了任何“checkstyle”工具都会告诉你抽象关键字是多余的。所有方法都是公开的。
如果一个类实现了一个接口,但没有实现其所有方法,则必须将其标记为抽象。如果一个类是抽象的,则它的一个子类应该实现其未实现的方法。
为了呼应其他答案,接口不是类。
接口是一种类似于类的引用类型,它只能包含常量、方法签名和嵌套类型。没有方法主体。接口不能实例化 — 它们只能由类实现或由其他接口扩展。
接口不是类层次结构的一部分,尽管它们与类结合使用。
定义新接口时,将定义新的引用数据类型。可以在任何可以使用任何其他数据类型名称的位置使用接口名称。如果定义一个引用变量,其类型为接口,则分配给它的任何对象都必须是实现该接口的类的实例
为了更好地解释为什么接口不是类,请考虑以下事项:
1/ 接口是值使用的类型
2/ 一个类用于对象
1/x
Object a = new Date();
String s = a.toString();
类型(Object)仅根据编译器的类型检查影响哪些代码是有效的,而不是代码实际执行的操作。
对象的类会影响代码的作用,因此第二行中的 a.toString() 调用返回一个看起来像 Date 的字符串,而不是一个看起来像“java.lang.Object@XXXXXXXX”的字符串。
由于接口是一种类型,因此它仅用于值,并且不会表示对象在运行时的实际作用。