假设我有这种方法
void print(String msg){
System.out.println(msg);
}
由于我创建了一个打印的方法,我不必知道它是如何打印的,所以这被认为是一种抽象,还是我把它弄错了?
答案 0 :(得分:0)
在某种程度上是抽象,使用它的任何东西都不需要知道它是如何打印的,只是它确实如此。一个更好的例子是使用回购。
interface UserRepo {
public User getUserByUsername(final String username);
public User updateUser(final User user);
}
然后对接口进行编码。例如,如果使用spring依赖注入:
@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并不知道repo如何获得用户,可能是使用数据库,平面文件或Web服务。
Here is some more info on Abstraction, with pictures!
Also this details the difference between abstraction and polymorphism
答案 1 :(得分: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)中查找abstract的定义时,就会出现这种情况。