可能重复:
Why are interfaces preferred to abstract classes?
Abstract class and Interface class?
请提供一个使用Interfaces的真实示例。此外,抽象类和接口之间有什么区别。我的意思是,Interfaces相对于抽象类有什么好处,因为Abstract Classes也可以用于与Interfaces相同的目的。那么接口为何如此重要?
感谢您的评论,但我仍然没有得到我的问题的答案。我已经要求提供java接口的“真实世界示例”。在现实世界中,就像在我们的日常生活中一样,我们使用java接口。我想这次我很清楚。
答案 0 :(得分:1)
接口只是定义类的契约(API)。换句话说,如果你的类实现了接口,它只是说明你必须实现哪些方法。
使用抽象类,您可以实现功能。这通常在多个类具有类似功能时完成,因此实现只需要执行一次。
两者之间的另一个不同之处在于,我的类实现了许多接口,但只能扩展一个抽象类(多重继承)。这是因为接口没有定义实现。如果您可以扩展多个抽象类,那么JVM将不知道使用哪个抽象类的实现。
使用界面的示例:
public interface Bouncable {
public void bounce(); // no implementation
}
public class Ball implements Bouncable {
// now you must provide the implementation
public void bounce() {
System.out.println("I can bounce!");
}
}
但是,假设您有多个可以反弹的对象,并且您不想多次编写实现。
使用抽象类的示例:
public abstract class BouncableObject {
// you can provide implementation
public void bounce() {
System.out.println("I can bouce too!");
}
// or not if you define it abstract
public abstract void sayMyName();
}
// you don't need to implement bounce()
public class Ball extends BouncableObject {
// but you have to give this implementation
public void sayMyName() {
System.out.println("I am a ball");
}
}
public class RubberChicken extends BouncableObject {
public void sayMyName() {
System.out.println("I am a rubber chicken");
}
}
现在,Ball
和RubberChicken
都可以调用bounce()
答案 1 :(得分:1)
“Java接口定义了一组方法,但没有实现它们。实现接口的类同意实现接口中定义的所有方法,从而同意某些行为。”
看看这些JAVA接口教程:
答案 2 :(得分:0)
抽象类:抽象类允许声明仅定义部分内容的类 实现,留下子类来提供细节。
在类中:子类继承的公共状态和行为的实现。子类必须实现的通用行为声明
抽象类不需要在其中包含抽象方法。但是任何具有抽象方法或不提供实现的类。对于在其超类中声明的任何抽象方法,必须声明为抽象类。无法实例化抽象类,但是对抽象类的引用可以 宣布。
<强>接口强>
接口就像一个只定义抽象方法的类。与类不同,接口不能包含实现(变量和方法体)。接口通常旨在由多个类实现
声称实现接口的类必须提供接口中定义的每个方法的实现。一个类可以实现许多接口。接口可以扩展现有接口。
在这里查看讲座:http://www.cs.auckland.ac.nz/courses/compsci230s2c/lectures/
答案 3 :(得分:0)
在java中,抽象类和接口两个概念听起来相似。 但是,
(1) 在界面中,您只能声明成员,您无法在界面内定义任何内容 在抽象类中可以同时具有定义和声明。
(2) 记住“一个类只能扩展一个类,因为它可以实现多个接口” 您不能在Java中扩展多个类,因为您可以实现任意数量的接口。这是接口相对于抽象类的优势之一。
(3) 扩展抽象类的类应该定义抽象类中的所有成员。如果您不想定义所有这些,则需要将子类声明为抽象类。 在Interfaces中,如果您实现了一个接口,您可以使用该接口所需的任何成员,因此需要将该类声明为抽象或其他任何东西。这是使用Interfaces而不是抽象类的另一个优点。