【问题标题】:Java Interfaces and Abstract class [duplicate]Java接口和抽象类[重复]
【发布时间】:2011-12-05 05:17:09
【问题描述】:

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

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

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

【问题讨论】:

标签: java


【解决方案1】:

“一个Java接口定义了一组方法但不实现它们。实现该接口的类同意实现接口中定义的所有方法,从而同意某种行为。”

看看这些 JAVA 接口教程:

【讨论】:

    【解决方案2】:

    接口只是定义类的契约 (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()

    【讨论】:

      【解决方案3】:

      在java中,抽象类和接口这两个概念听起来很相似。 但是,

      (1) 在接口中你只能声明成员,你不能在接口内定义任何东西 在抽象类中可以有定义和声明。

      (2) 记住“一个类只能扩展一个类,因为它可以实现多个接口” 你不能在java中扩展一个以上的类,因为你可以实现任意数量的接口。这是接口相对于抽象类的优势之一。

      (3) 扩展抽象类的类应该定义抽象类的所有成员。如果您不想定义所有这些,则需要将子类也声明为抽象类。 在接口中,如果您实现了一个接口,您可以使用该接口中您想要的任何成员,因此需要将类声明为抽象类或其他任何东西。这是使用接口而不是抽象类的另一个优点。

      【讨论】:

        【解决方案4】:

        抽象类:抽象类允许声明只定义部分的类 实现,让子类提供细节。

        在类中:实现将由子类继承的公共状态和行为。子类必须实现的通用行为声明

        抽象类中不需要有抽象方法。但是任何具有抽象方法或不提供实现的类。对于在其超类中声明的任何抽象方法,必须将其声明为抽象类。抽象类不能被实例化,但是对抽象类的引用可以 被宣布。

        界面:

        接口就像一个只定义抽象方法的类。与类不同,接口不能包含实现(变量和方法体)。一个接口通常旨在由多个类实现

        声称实现接口的类必须提供接口中定义的每个方法的实现。一个类可以实现很多接口。接口可以扩展现有接口。

        看看这里的讲座:http://www.cs.auckland.ac.nz/courses/compsci230s2c/lectures/

        【讨论】:

          猜你喜欢
          • 2011-07-02
          • 2011-07-13
          • 1970-01-01
          • 2011-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-21
          • 2012-07-14
          相关资源
          最近更新 更多