我们如何在java中实现抽象?

时间:2015-11-29 16:34:22

标签: java abstraction

根据定义,抽象隐藏了实现细节并仅显示了功能。但确切地说,我们隐藏的是什么,在哪里以及哪个部分?

AFAIK以下程序是抽象的一个例子:

public interface ToBeImplemented { 

   public string doThis();
}

public class Myclass implements ToBeImplemented {

@override
public string doThis() {

//Implementation

 return null;
 }
}

如果我错了,这不是抽象,那么抽象的正确例子是什么?

3 个答案:

答案 0 :(得分:2)

您对抽象的定义是正确的。你提供的代码绝对是一种抽象形式。

为什么呢?

因为代码的用户只会提供接口。用户只会知道您的代码combined执行某项任务,但他/她不知道代码是如何完成某项任务的。

例如:

doThis()

在此示例中,用户只能获取界面,因此他/她只知道您的代码可以总结为 n 。但是用户不知道你使用for循环来总结 n

答案 1 :(得分:1)

在上面的示例中,您可以编写如下内容:

@extends('book.show')
@section('comment')
    Yuup!
@stop

}

然后你可以有另一个类,例如主要方法:

public interface ToBeImplemented { 

    public string doThis();
}

public class ImplementationA implements ToBeImplemented {

    @override
    public string doThis() {

    //ImplementationA of doThis

    return null;
    }
}

public class ImplementationB implements ToBeImplemented {

    @override
    public string doThis() {

        //ImplementationB of doThis

        return null;
    }

抽象是您可以声明ToBeImplemented引用,然后为其分配ImplementationA或ImplementationB(以及可能的任何其他实现)。但是你根据抽象ToBeImplemented编写代码,并让一些条件决定应该调用ToBeImplemented(以及因此doThis())的正确实现。

答案 2 :(得分:0)

维基百科是开始学习的好地方:Abstraction (computer science)

  

抽象的本质是保留在给定上下文中相关的信息,并忘记在该上下文中无关的信息。

     

John V. Guttag

将接口与实现分离是一种方式来提供抽象。

Collections framework in Java就是一个很好的例子。调用应用程序使用声明为接口的变量(引用),例如ListMap,而实际的对象实际上是一个具体的类,如ArrayListHashMap

如果界面提供了所有需要的功能,那么调用应用程序就不需要了解底层实现。

问题中显示的示例代码是将接口与实现分离的示例,因此也是抽象的示例。如果它使用特定的有意义的上下文(如BankAccount作为接口,SavingsAccountCheckingAccount作为实现,则会大大改进该示例。