我是Java的新手,我希望这个问题不太基本。我无法理解为什么需要接口,以及实现和继承之间的区别是什么。
如果我想在程序中使用Comparable方法,(java.lang.Comparable)
为什么不能让我的类继承自Comparable
?
public class Main {
public static void main(String[] args) {
class DocumentReader extends Comparable;
为什么IntelliJ会说“这里没有接口”?
答案 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)
您只能从一个类扩展并实现多个接口。