我想知道这些类之间的区别,在我的应用程序中,我需要设置一些参数并通过方法传递对象。我有一些只使用方法的接口(主要是DAO/Factory方法)。我对我的密码有疑问。
接口:
public interface Animal {
void roar();
}用接口实现方法的混凝土类
public Lion implements Animal {
@overrride
void roar(){
//roar like lion!
}
}具体类:我有一个用于构造对象以使DAO操作的类。
public class Lion {
private String lionName;
getter and setter...
void roar(){
//Roar like Lion.
}
}摘要:
abstract class Lion {
abstract public void abstractRoar();
}提前谢谢,像往常一样,你的帮助真的很感激。
发布于 2017-01-23 21:10:54
如果我理解得对,你的问题是:
每次创建类时都需要实现接口吗?
答案是否定的。接口仅用于抽象。如果有几个类共享共同的方法,那么使用一个接口将简化代码。
有关接口的更多信息(我应该何时使用,如何使用),请参阅“有效Java”一书(第19项)。下面是一个链接:
希望能解决你的问题。
发布于 2017-01-23 20:59:24
我有这样的事情:
类用户:
public class Users {
private int userId;
private String userPassword;
private int userProfile;
private String userName;
private String userPosition;
private int userCencos;
private String userOffice;
public Users(int userId, String userPassword, int userProfile, String userName, String userPosition, int userCencos, String userOffice) {
Constructor..
}
public String getUserOffice() {
return userOffice;
}
more getter/setter ...接口:
public interface UserDAOInterface {
public int insert(Users user) throws SQLException;
more DAO Operations...
}DAO用户:
public class UserDAOConcrete implements UserDAOInterface {
private int result;
public PreparedStatement query;
@Override
public Users login(int userId, String password) throws NumberFormatException , SQLException{
SQL sql = new SQL();
try {
PreparedStatement loginQuery = sql.createPStatement(cf.SELECT_USER_BY_LOGIN_DATA);
loginQuery.setInt(1, userId);
loginQuery.setString(2, password);
System.out.println(loginQuery.toString());
try {
ResultSet resultSet = loginQuery.executeQuery();
if (!resultSet.isBeforeFirst()) {
loginQuery.close();
sql.dbConection().close();
throw new NullPointerException("Usuario No encontrado");
}
while (resultSet.next()) {
Users newLoggedUser = new Users();
newLoggedUser.setUserId(resultSet.getInt("UserId"));
newLoggedUser.setUserCencos(resultSet.getInt("CostCenter_CostCenterId"));
newLoggedUser.setUserProfile(resultSet.getInt("Profiles_ProfileId"));
newLoggedUser.setUserName(resultSet.getString("UserName"));
newLoggedUser.setUserPosition(resultSet.getString("UserPosition"));
newLoggedUser.setUserOffice(resultSet.getString("UserOffice"));
resultSet.close();
loginQuery.close();
sql.dbConection().close();
return newLoggedUser;
}
} catch (SQLException | NullPointerException | NumberFormatException e) {
throw e;
} finally {
try {
loginQuery.close();
sql.dbConection().close();
} catch (SQLException e) {
System.out.println("SQL Error: " + e);
}
}
return null;
} catch (SQLException ex) {
System.out.println("SQL Error: " + ex);
}
return null;
} DAOFactory:
public class UserDAOFactory {
public static UserDAOConcrete getUserDAO(String type) {
if (type.equalsIgnoreCase("user")) {
return new UserDAOConcrete();
} else {
return new UserDAOConcrete();
}
}呼叫方法:
UserDAOConcrete userDAO = UserDAOFactory.getUserDAO("user");
Users userData = userDAO.login(Integer.parseInt(loginUserId.getText()), String.valueOf(userLoginPassword.getPassword()));
//Do whatever you need with the Object userData.如您所见,我有一个与Getter/setter和接口混合的类,工作很好,我应该像这样做所有的代码吗?
发布于 2017-01-23 20:33:16
它们都有不同的用例,您需要从这些用例中决定哪些更适合您的需求。
interface的一般用途是定义一组相关的方法,这些方法可以在多个/多个类之间实现和重用。以动物为例,我认为,我会将Animal作为父类,由类(如Lion、Tiger、Bear等)进行扩展。这个用例的接口可以类似于Noises。每一种动物都可能有不同的噪音,然而,它们都是制造噪音的。该接口可以有growl、roar、sniff等。
https://stackoverflow.com/questions/41814612
复制相似问题