我知道
抽象是隐藏实现细节的过程 仅显示功能。
但是通过使用接口我们无法实现任何东西。我们也需要实现的类 开发应用程序。例如在java中我们有List接口,它有像LinkedList和ArrayList这样的子类。它们也提供了这些类的代码。我们能够看到那些已实现代码的代码。任何人都可以给我一个示例抽象。
如果我只给某人接口,那么我就可以实现抽象。但是这个例子呢?
答案 0 :(得分:1)
当你有方法时
public void m(List<String> strings) {
你不知道strings
的具体类型实现,只知道interface
- 这也意味着你的其他方法a
和{{ 1}}可以使用b
或m
来调用LinkedList
,并且您不需要两种方法,每种方法对应一种具体的实现类型。
答案 1 :(得分:1)
Abstraction
主要与某些类本身无关,而与与其客户的关系有关。让我们举个例如LinkedList
类实现接口IList
(我对.NET更熟悉)并提供它作为公共API 。
当客户端通过LinkedList
接口使用IList
时,客户端不知道它是如何实现的。
因此,减少和隐藏信息都是关于抽象原则的。更一般地说,抽象提供了某些函数的生产者和消费者之间松散耦合的程度。
例如,如果某个客户端知道某个接口(或类)的实现细节,那么它可以对其行为和内部实现做出一些假设,这是需要避免的。否则,在这种情况下,您无法轻松切换或更改IList的实现。这通常会产生敏感,松耦合等想法,SOLID就是它的全部。
答案 2 :(得分:1)
隐藏在这里意味着使代码的客户端独立的底层实现。
接口指定您可以执行的操作。实现指定如何来执行此操作。
随着 如何随时间改进/改变,使用接口的客户端(另一段代码)继续工作而不进行修改。客户端仍然可以获得它想要的东西,但现在可能以更有效的方式。
抽象是一种旨在缓解程序员和消费者生活的编程风格。它与隐藏其他人的源代码无关。可能还有其他方法可以做到。
答案 3 :(得分:0)
据我了解,它只是意味着(使用您提供的示例)必须 全部在界面中实现的方法才能创建功能类。 这个事实使您负责提供实现这些方法的方法,联系人(接口)只对您实现它们感兴趣。
所以,
功能
要知道在&#39; List add(E e)
List`的所有具体子类中都有方法(you know that there is this method and you can uses it to add elements to the
并且
隐藏实施细节
意味着你不知道如何实施(通常不关心)。
答案 4 :(得分:0)
实施例: 如果您制作界面飞机,并且Warplanes,Civilplanes,Woodenplanes类都实现了该界面,您可以在某种方法中作为参数让我们称之为 - public void Fly(Airplanes airplane){some code ..}使用您之前创建的所有类但是你必须在实现该接口的所有类中实现Airplane接口的所有方法(制作一个正文),或者你也可以将它们用作返回类型,如果方法是:
public Airplanes Fly(Airplanes airplane){
some code..
boolean c1=(airplane instanceof Civilplanes);
boolean c2=(airplane instanceof Woodenplanes);
if(c1) return new CivilPlanes();
else if(c2) return new Woodenplanes();
else return new Warplanes(); }