2016-06-15 62 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

相關問題