从接口实现和从对象类扩展之间有什么区别?

时间:2019-03-28 21:58:26

标签: java

我是Java的新手,我希望这个问题不太基本。我无法理解为什么需要接口,以及实现和继承之间的区别是什么。

如果我想在程序中使用Comparable方法,(java.lang.Comparable)为什么不能让我的类继承自Comparable

public class Main {

    public static void main(String[] args) {

    class DocumentReader extends Comparable;

为什么IntelliJ会说“这里没有接口”?

3 个答案:

答案 0 :(得分:1)

松散地说,自JDK 8起并不完全准确...但是可以掌握基本知识。

接口是实现接口的类必须具有的方法的规范。该接口未提供任何实现。因此,说您的类为“ implements Comparable”(实现可比较),则有义务提供具有特定签名的compareTo方法。

一个类可能包含实际的方法实现,甚至可能包含成员数据。扩展类本质上是该类的专业化。您可以获得基类所做的一切,您可以修改(通过覆盖基方法)或进行扩充(通过添加新方法)。


EXCEPT 诸如抽象方法之类的东西,其中基类不提供实现,因此强制扩展类提供实现。

那么,从一种角度来看,您可以将接口视为所有方法都是抽象的抽象类。这是可行的,除了Java只允许一个类扩展一个类(没有“ X类扩展A,B”),但是一个类可以实现多个接口(“ X类实现A,B”,我的语法可能是不完全正确)。限制从多个类继承是有技术原因的,但是我将在此处跳过。

正如我在一开始所说的那样,从JDK 8开始,这并不完全正确-接口中存在“默认方法”,因此该行有些模糊。

如果将对象以标准方式连接到其他对象,我认为接口就像是对象必须提供的插头和插座类型的规范。您是否希望“比较”对象,以便可以按其他组件的顺序排列它们?然后,您必须实现Comparable。

答案 1 :(得分:0)

我正在尝试以编程方式进行解释。 扩展:当您想扩展子类以在继承中进行扩展时,我们使用Java扩展。 工具:当工具是接口时,我们使用关键字工具。

扩展与工具:简而言之,扩展是用于扩展类,工具是用于实现接口。

由于Java不支持多重继承,因此该问题可以通过多个接口解决。

扩展:

class Person
  {
     String name;
     Person(String n)
      {
        name = "Person:  " + n;
      }
   }
class Mother extends Person
  {
     Mother(String n)
     {
       super(n);
       name = "Mother:  " + n;
     }
  void FeedChildren()
    {
       System.out.println(name + " is feeding the kids ...");
    }
 }
class Wife extends Person
  {
    Wife(String n)
     {
         super(n);
         name = "Wife:  " + n;
      }
  void CallHusband()
   {
      System.out.println(name + " is calling the husband ...");
   }
}
public class Test
  {
      public static void main(String args[])
        {
            Person p = new Person("Prerna");
            Mother m = new Mother("Mahima");
            Wife w = new Wife("Raani");
            System.out.println("p is a " + p.name);
            System.out.println("m is a " + m.name);
            System.out.println("w is a " + w.name);
            m.FeedChildren();
            w.CallHusband();
        }
  }

这里的基层是“人”,“母亲”和“妻子”,但是当“妻子”和“母亲”是同一个人时,那就是我们正在谈论的人。

实现

class Person
  {
    String name;
    Person(String n)
    {
      name = "Person:  " + n;
    }
 }
interface Mother
  {
    public void FeedChildren();
  }
interface Wife
  {
    public void CallHusband();
  }
class WifeAndMother extends Person implements Wife, Mother
  {
    WifeAndMother(String n)
     {
        super(n);
        name = "Wife and mother:  " + n;
     }
public void FeedChildren()
   {
       System.out.println(name + " is feeding the children.");
   }
public void CallHusband()
  {
      System.out.println(name + " is calling her husband.");
  }
}
public class Test
 {
    public static void main(String args[])
      {
          Person p = new Person("Prerna");
          WifeAndMother w = new WifeAndMother("Raani");
          System.out.println("p is a " + p.name);
          System.out.println("w is a " + w.name);
          w.FeedChildren();
          w.CallHusband();
      }
  }

答案 2 :(得分:-1)

您只能从一个类扩展并实现多个接口。