繁体   English   中英

Java实例vs抽象类和方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM