Java接口和抽象类

时间:2011-10-11 11:07:58

标签: java

  

可能重复:
  Why are interfaces preferred to abstract classes?
  Abstract class and Interface class?

请提供一个使用Interfaces的真实示例。此外,抽象类和接口之间有什么区别。我的意思是,Interfaces相对于抽象类有什么好处,因为Abstract Classes也可以用于与Interfaces相同的目的。那么接口为何如此重要?

感谢您的评论,但我仍然没有得到我的问题的答案。我已经要求提供java接口的“真实世界示例”。在现实世界中,就像在我们的日常生活中一样,我们使用java接口。我想这次我很清楚。

4 个答案:

答案 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");
    }
}

现在,BallRubberChicken都可以调用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而不是抽象类的另一个优点。