[英]Java instance vs Abstract Classes and methods
我是Java新手,并且一直在阅读它的主要主题。 我最近介绍了抽象类和实例。 我已经阅读了他们的定义,所以它不是我想要的定义。
我需要帮助,以了解为什么需要使用界面。 我在网上看到的关于Java教程接口的所有示例似乎都可以使用抽象的类/方法组合来实现。
是否存在仅使用接口即可解决问题而不能将抽象类/方法组合使用的常见情况?
接口在Java中定义了新的辅助数据类型。 它(接口)仅是一组最终变量和抽象方法 。
接口的成员 默认为“ public” 。 界面中实际上不允许使用私有修饰符和受保护的修饰符。
接口是引用类型,仅不能创建其对象。
一个接口可以继承另一个接口,但不能继承任何类。
一个类不能继承任何接口,但它(一个类)可以实现零个到多个接口。
如果一个类实现接口,则1)它必须重写所有已实现接口的所有抽象方法。
2)在接口和类之间创建类型兼容性。 它允许接口引用可以引用实现类的对象。
interface Iface
{
int x = 3;//final and public by default
void f();//abstract and public by default
}
interface AnotherI extends Iface
{
//more declarations possible here
}
class InterfaceDemo implements Iface
{
public void f()
{
int i;
for(i =0 ; i< x; i++)
System.out.println("Interfaces are widely used");
}
public static void main(String args[])
{
Iface ref = new InterfaceDemo();
ref.f();//allowed
//ref.newMethodsOfClass();//not allowed
}
}
Java API中的一个很好的例子是LinkedList
类。
从链接中可以看到,它既实现了List
接口,也实现了Deque
接口(以及其他一些接口),从而可以在需要使用任何一个时使用它。 仅使用抽象类是不可能的。
主要区别在于您只能扩展一个类,但可以实现多个接口。
如果您想(例如)实现一个侦听器同时扩展另一个类,那么这可能很重要。 请注意,尽管在许多情况下,最好使用匿名内部类进行监听。
Java不支持多态继承-一个类可以extend
多个类。 进行此选择是为了避免与层次冲突解决相关的问题(两个父类中都存在一种方法-您使用哪个?)。 用简单的话来说,在Java中只能有一个“是”关系。
但是,为了允许某种形式的多态性,引入了接口。 这些是空心模板,类必须为其提供实现,并提供一种创建“外观”关系的方式。 虽然只允许对象“成为”一个(父)类的实例,但它可能“看起来”像任何数量的接口。
通过从接口继承继承,它可以处理跨领域的概念-即,完全不同的继承结构的类可能仍具有某些抽象相似性。 JDK的一个很好的例子是Serializable
,它是一个标记接口(一个没有方法的接口)。 实际上,任何类都可以序列化,但是几乎所有可序列化的类都不共享其继承层次结构。 抽象类无法处理这个概念-您必须走出类层次结构才能实现它-即接口是实现它的唯一方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.