【问题标题】:Why do we need interface while we can do the same with class itself? [duplicate]为什么我们需要接口,而我们可以对类本身做同样的事情? [复制]
【发布时间】:2018-05-23 05:14:33
【问题描述】:

考虑我下面的代码,它用于使用界面预订机票

import java.io.*;

interface FlightDetails {
    void getFlightDetails();
    void book(Ticket ticket);
}

class AirIndia implements FlightDetails {
    public void getFlightDetails() {
        System.out.println("Flight Details of Air India");
    }

    public void book(Ticket ticket) {
        System.out.println("Ticket booked in Air India");
    }
}

class Emirates implements FlightDetails {
    public void getFlightDetails() {
        System.out.println("Flight Details of Emirates");
    }

    public void book(Ticket ticket) {
        System.out.println("Ticket booked in Emirates");
    }
}

class Lufthansa implements FlightDetails {
    public void getFlightDetails() {
        System.out.println("Flight Details of Lufthansa");
    }

    public void book(Ticket ticket) {
        System.out.println("Ticket booked in Lufthansa");
    }
}

class Ticket{

}

public class InterfaceFlight {
    public static void main(String[] args) throws IOException {
        FlightDetails flight = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("1.Air India\n2.Emirates\n3.Lufthansa");
        System.out.print("Enter choice = ");
        int choice = Integer.parseInt(br.readLine());
        if(choice == 1){
            flight = new AirIndia();
            flight.book(new Ticket());
        } else if(choice == 2){
            flight = new Emirates();
            flight.book(new Ticket());
        } else if(choice == 3){
            flight = new Lufthansa();
            flight.book(new Ticket());
        }
    }
}

通过编写单独的类并为各个航班创建对象,可以在不使用接口的情况下完成上述实现

那我们为什么需要接口呢?

提前致谢!

【问题讨论】:

  • interface 隐藏了类的实现细节,它还允许从不同的基类扩展该类,该基类仍然遵守interface 契约
  • "通过编写单独的类并为各个航班创建对象,可以在不使用接口的情况下完成上述实现" 尝试实际这样做,看看它是什么样的。现在想象一下,如果你需要对对象做一些工作然后返回它,你会返回什么?
  • 接口的优势在于提供泛型类型,即以类似方式处理具有不同类型的对象的概念。
  • 这个问题的答案在于“接口”的基础知识。您应该首先考虑深入研究 OOP 概念。
  • 现在我清楚地理解了这个概念

标签: java


【解决方案1】:

毫无疑问,即使此时没有界面,您的代码也可以正常工作,但是。实现一个接口可以让一个类对它承诺提供的行为更加正式。接口在类和外部世界之间形成一个契约,这个契约在编译器构建时强制执行。如果您的类声称实现了一个接口,则该接口定义的所有方法都必须出现在其源代码中,然后该类才能成功编译。

例如,如果您有多个 Flight 类,每个类都实现 FlightDetails ,如果稍后您想更改 FlightDetails 接口的结构,它可以帮助您更轻松地更改所有 Flight 类的结构

【讨论】:

    【解决方案2】:

    interface 是类可以做什么的契约(或协议、框架或共识)。

    当一个类实现某个接口时,它承诺为接口中声明的所有抽象方法提供实现。

    接口定义了一组常见的行为。实现接口的类同意这些行为,并为这些行为提供自己的实现。这允许您在接口上编程,而不是在实际实现中。

    简而言之: 一个类只是该契约的一个实现

    【讨论】:

      【解决方案3】:

      当一个类实现一个接口时,它定义或覆盖了接口的空白函数/方法。所有实现接口的类都同意定义接口的方法(如契约)。

      用途:

      接口用于编码各种类型的类共享的相似性,但不一定构成类关系。

      接口的另一个用途是能够使用多重继承。

      接口是一种工具,可确保具有相似行为的类实现产生这些行为的必要方法。

      【讨论】:

        猜你喜欢
        • 2019-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-17
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多