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

Java 从接口实现和从对象类扩展有什么区别?,java,Java,我是java新手,希望这个问题不要太简单。我很难理解为什么需要接口,以及实现和继承之间的区别 如果我想在我的程序中使用Comparable方法java.lang.Comparable,为什么我不能让我的类继承自Comparable 为什么IntelliJ会说“这里不需要接口”?您只能从一个类扩展并实现多个接口。我试图以编程方式解释。 扩展:当您想要扩展一个子类以在继承中扩展时,我们使用Java扩展。 Implements:当实现接口时,我们使用关键字implement Extend vs Imp

我是java新手,希望这个问题不要太简单。我很难理解为什么需要接口,以及实现和继承之间的区别

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


为什么IntelliJ会说“这里不需要接口”?

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

我试图以编程方式解释。 扩展:当您想要扩展一个子类以在继承中扩展时,我们使用Java扩展。 Implements:当实现接口时,我们使用关键字implement

Extend vs Implements:简而言之,extends用于扩展类,Implements用于实现接口

因为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();
      }
  }

粗略地说,并不是完全准确,因为JDK 8。。。但是掌握基本知识没问题

接口是实现接口的类必须具有的方法规范。该接口不提供任何实现。因此,如果说您的类“实现了Comparable”,它就有义务提供带有特定签名的compareTo方法

类可能包含实际的方法实现,也可能包含成员数据。扩展类本质上是该类的一种特殊化。您可以获得基类所做的一切,您可以通过重写基类方法来修改基类,也可以通过添加新方法来扩充基类

除了抽象方法,基类不提供实现,因此强制扩展类提供实现

因此,从一个角度来看,可以将接口视为所有方法都是抽象的抽象类。这是可行的,除了Java只允许一个类扩展一个类没有“ClassX扩展a,B”,但是一个类可以实现多个接口“ClassX实现a,B”-我的语法可能不准确。限制从多个类继承是有技术原因的,但我将在这里跳过这一点

正如我在开始时所说的,这在JDK 8中并不完全正确——接口中有“默认方法”,因此这一行变得有点模糊

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

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();
      }
  }