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