2016-06-15 40 views
1

比方说,我有这样的方法正在创建一个被认为是抽象的方法吗?

void print(String msg){ 
System.out.println(msg); 
} 

自从我创建的版画,我不必知道它是如何打印它的方法,因此这被认为是一个抽象的,还是我得到这一切错了吗?

+0

抽象是指具有多个可互换的行为,例如通过使用接口的公共接口进行操作。所以,如果你有一个IPrinter接口,多个打印机继承自己的打印版本,这将是抽象的 –

+0

考虑在http://programmers.stackexchange.com上提出有关软件开发的概念性问题 – everton

+0

术语[抽象](https: //en.wikipedia.org/wiki/Abstraction_(software_engineering))指的是编程中的很多东西。一种方法绝对是一种控制抽象,因为它抽象了如何完成打印的细节。 'String'参数类型将是一个数据抽象。这是所选择的泛化应该适应大多数打印用例。你也可以使用'print(File file)'和'File'也是一个抽象概念,但很可能是抽象层次错误,因为它可能是一个不好的概括。 – plalx

回答

0

如果你已经创建了这个方法只是隐藏底层的实现细节,那么它是封装。

你的方法不是抽象的,因为它是一个具体的实现。您只能在界面中定义签名或抽象类中的抽象方法时将其称为抽象。

从Java教程:

抽象方法是没有实现声明(没有括号,并且随后是分号)的方法,是这样的:

abstract void moveTo(double deltaX, double deltaY);

任何抽象可以存在于思想或作为想法,但没有物理或具体的存在。当我在google中查找抽象的定义(https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=abstract%20definition)时,这就出现了。

+0

我以此为例,我想确定的是如果创建一个方法并且该方法执行复杂的事情,那么该方法就是您想要执行的操作的抽象。就像,将员工保存到数据库中,您只需调用saveEmployee()方法 –

+0

您的界面“IPrintable”没有任何意义。为什么你需要将一个字符串传递给可打印的对象?也许你的意思是'IPrinter'? – plalx

+0

Thx指向。修正了。 – randominstanceOfLivingThing

0

在某种程度上是抽象的,任何使用它的东西都不需要知道它如何打印,只是它的确如此。一个更好的例子是使用回购。

interface UserRepo { 
    public User getUserByUsername(final String username); 
    public User updateUser(final User user); 
} 

然后,您对接口进行编码。如果使用例如春天依赖注入:

@Service 
public class UserService { 
    @Resource 
    private UserRepo userRepo; 

    public void updateUserEmail(final String username, final String newEmail) { 
    final User user = userRepo.getUserByUsername(username); 
    user.setEmail(newEmail); 
    userRepo.updateUser(user); 
    } 

UserService不知道回购是怎么想起来了,这是用户,可以使用一个数据库,平面文件,或web服务。

Here is some more info on Abstraction, with pictures!

Also this details the difference between abstraction and polymorphism

相关问题